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 相关文章推荐
改变Apache端口等配置修改方法
Jun 05 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
PHP源码之explode使用说明
Aug 05 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
php数组使用规则分析
Feb 27 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
php nginx 实时输出的简单实现方法
Jan 21 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 PHP
PHP性能测试工具xhprof安装与使用方法详解
Apr 29 PHP
PHP基于cookie实现统计在线人数功能示例
Jan 16 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 PHP
PHP token验证生成原理实例分析
Jun 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批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
在Django中创建动态视图的教程
2015/07/15 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
python的range和linspace使用详解
2019/11/27 Python
keras K.function获取某层的输出操作
2020/06/29 Python
用python写爬虫简单吗
2020/07/28 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
优秀学生自我鉴定范例
2013/12/18 职场文书
机关节能减排实施方案
2014/03/17 职场文书
写字楼租赁意向书
2014/07/30 职场文书
活动总结新闻稿
2014/08/30 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
党员个人承诺书
2015/04/27 职场文书
迎国庆主题班会
2015/08/17 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
导游词之峨眉山
2019/12/16 职场文书
Python学习之os包使用教程详解
2022/03/21 Python