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 相关文章推荐
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
PHP 程序员应该使用的10个组件
Oct 31 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
二招解决php乱码问题
Mar 25 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
PHP基础知识介绍
Sep 17 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
php基于mcrypt的加密解密实例
Oct 27 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 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日历制作代码分享
2014/01/20 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP中empty,isset,is_null用法和区别
2017/02/19 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
利用python如何处理nc数据详解
2018/05/23 Python
python 反向输出字符串的方法
2018/07/16 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
2018/10/16 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
为什么python比较流行
2020/06/19 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
副主任竞聘演讲稿
2014/08/18 职场文书
政风行风评议工作总结
2014/10/21 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis