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实现网上点歌(二)
Oct 09 PHP
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
解决GD中文乱码问题
Feb 14 PHP
php自定义函数之递归删除文件及目录
Aug 08 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
php创建基本身份认证站点的方法详解
Jun 08 PHP
php绘图之在图片上写中文和英文的方法
Jan 24 PHP
检测codeigniter脚本消耗内存情况的方法
Mar 21 PHP
PHP浮点数精度问题汇总
May 13 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
php微信小程序解包过程实例详解
Mar 31 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
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
Python while 循环使用的简单实例
2016/06/08 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python图书管理系统
2020/04/05 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
光声世纪笔试题目
2012/08/25 面试题
品学兼优的大学生自我评价
2013/09/20 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android