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 相关文章推荐
php与php MySQL 之间的关系
Jul 17 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
Yii配置文件用法详解
Dec 04 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
PHP获取数组最大值下标的方法
May 12 PHP
php实现无限级分类查询(递归、非递归)
Mar 10 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
php-fpm中max_children的配置
2019/03/15 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
详解babel升级到7.X采坑总结
2019/05/12 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
python制作小说爬虫实录
2017/08/14 Python
用Python配平化学方程式的方法
2019/07/20 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
薇姿法国官网:Vichy法国
2021/01/28 全球购物
购房公证委托书(2014版)
2014/09/12 职场文书
银行贷款收入证明
2014/10/17 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
毕业实习证明范本
2015/06/16 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android