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 相关文章推荐
一个MYSQL操作类
Nov 16 PHP
php header Content-Type类型小结
Jul 03 PHP
解析PHP中的unset究竟会不会释放内存
Jul 18 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
PHP中ini_set与ini_get用法实例
Nov 04 PHP
php递归遍历多维数组的方法
Apr 18 PHP
win平台安装配置Nginx+php+mysql 环境
Jan 12 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
微信支付开发维权通知实例
Jul 12 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
php实现mysql数据库备份类
2008/03/20 PHP
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
Js实现动态添加删除Table行示例
2014/04/14 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
webpack3之loader全解析
2017/10/26 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
Python collections模块实例讲解
2014/04/07 Python
Python中你应该知道的一些内置函数
2017/03/31 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
Python有参函数使用代码实例
2020/01/06 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
python cookie反爬处理的实现
2020/11/01 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
python中_del_还原数据的方法
2020/12/09 Python
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
工地资料员岗位职责
2013/12/31 职场文书
伦敦奥运会口号
2014/06/13 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
干部作风建设心得体会
2014/10/22 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
Spring Boot 实现 WebSocket
2022/04/30 Java/Android