php pki加密技术(openssl)详解


Posted in PHP onJuly 01, 2013
<?php
//pki加密
//使用pki加密需要开启 openssl扩展
//php.ini extension = php_openssl.dll扩展
/*pki模式是
 * 公钥加密,私钥解密;
 * 私钥加密,公钥解密;
 */
//私钥加密,公钥解密
//客户端
//$data数据
$data = 'abcd';
//获取私钥 $priv_key_id
$priv_key_id = openssl_get_privatekey(file_get_contents('99bill-rsa.pem', r));
//获取公钥  $pub_key_id
$pub_key_id = openssl_get_publickey(file_get_contents('99bill-rsa.cer', r));
//$data首选通过SHA1哈希加密,然后通过$priv_key_id私钥加密,生成签名$signature
//$signature就是加密过的签名
//openssl_sign()加密函数,至于它的解密方法我不知道??????????????????????
openssl_sign($data, $signature, $priv_key_id, OPENSSL_ALGO_SHA1);
//还有两种加密函数,而且这两种加密函数有解密方法,知道
//第一种:私钥加密,公钥解密
//$data要加密的数据,$crypted是加密生成的数据,$decrypted是解密生成的数据;  $data与$decrypted值相同
//通过$priv_key_id私钥加密,生成$crypted;
openssl_private_encrypt($data, $crypted, $priv_key_id);
echo $crypted;
//通过$pub_key_id公钥解密,生成$decrypted
openssl_public_decrypt($crypted, $decrypted , $pub_key_id);
//第二种:公钥加密,私钥解密
//$data要加密的数据,$crypted是加密生成的数据,$decrypted是解密生成的数据;  $data与$decrypted值相同
//通过$pub_key_id公钥加密,生成$crypted;
openssl_public_encrypt($data, $crypted, $pub_key_id);
//通过$priv_key_id私钥解密,生成$decrypted
openssl_private_decrypt($crypted, $decrypted, $priv_key_id);
//注意事项,我这边的获取公钥与私钥的文件是不对应的
//正常情况,获取公钥与私钥文件是一一对应的,这里我使用快钱的。
//快钱给了私钥生成文件,对应的公钥生成文件在快钱那边
//快钱给了公钥生成文件,对应的私钥生成文件在快钱那边
//也就是缺少了一个公钥生成文件和一个私钥生成文件
//我始终没找到一个一一对应的私钥、公钥生成文件,如果你找的了发我一份,谢谢。
// openssl_verify()方法验证签名是否正确(私钥加密生成的数据返回来,用对应的公钥验证),只有这一种情况。
// $signature公钥加密生成的数据,$data原始数据,成功返回1,失败返回0,错误返回-1
// $pub_key_id公钥
openssl_verify($data, $signature, $pub_key_id);
//从内存中释放私钥或公钥
openssl_free_key($priv_key_id);
openssl_free_key($pub_key_id);

生成私钥与公钥
genrsa -out private-rsa.pem
rsa -in private-rsa.pem -pubout -out pubic-rsa.cer
PHP 相关文章推荐
文件上传的实现
Oct 09 PHP
php 团购折扣计算公式
Nov 24 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
php数据类型判断函数有哪些
Sep 23 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
[原创]php逐行读取txt文件写入数组的方法
Jul 02 PHP
Yii中CGridView实现批量删除的方法
Dec 28 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
PHP实现搜索时记住状态的方法示例
May 11 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 PHP
使用php实现快钱支付功能(涉及到接口)
Jul 01 #PHP
在wamp集成环境下升级php版本(实现方法)
Jul 01 #PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 #PHP
php5.3 注意事项说明
Jul 01 #PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 #PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
Jul 01 #PHP
解析php做推送服务端实现ios消息推送
Jul 01 #PHP
You might like
php str_pad 函数用法简介
2009/07/11 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
python组合无重复三位数的实例
2018/11/13 Python
Python操作json的方法实例分析
2018/12/06 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
化工操作工岗位职责
2014/04/29 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python
纯html+css实现打字效果
2021/08/02 HTML / CSS