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 相关文章推荐
require(),include(),require_once()和include_once()区别
Mar 27 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
PHP扩展编写点滴 技巧收集
Mar 09 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
分享10段PHP常用代码
Nov 11 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
PHP编程基本语法快速入门手册
Jan 07 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 PHP
php解决约瑟夫环算法实例分析
Sep 30 PHP
详解Laravel服务容器的绑定与解析
Nov 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
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
两款万能的php分页类
2015/11/12 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
javascript document.images实例
2008/05/27 Javascript
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
Element Input组件分析小结
2018/10/11 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
Python实现的rsa加密算法详解
2018/01/24 Python
通过Pandas读取大文件的实例
2018/06/07 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
pandas分批读取大数据集教程
2020/06/06 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
应届生英语教师求职信
2013/11/05 职场文书
经济管理专业自荐信
2013/12/30 职场文书
电子商务专业求职信
2014/03/08 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
品质保证书格式
2015/02/28 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
python运行脚本文件的三种方法实例
2022/06/25 Python