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
菜鸟学PHP之Smarty入门
Jan 04 PHP
php下获取客户端ip地址的函数
Mar 15 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
PHP实现变色验证码实例
Jan 06 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
php读取文件内容到数组的方法
Mar 16 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 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修改上传图片尺寸的方法
2015/04/14 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
python获取糗百图片代码实例
2013/12/18 Python
Python数组条件过滤filter函数使用示例
2014/07/22 Python
python数组过滤实现方法
2015/07/27 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
python之文件读取一行一行的方法
2018/07/12 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
django 模型中的计算字段实例
2020/05/19 Python
Python os库常用操作代码汇总
2020/11/03 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
班组长的岗位职责
2013/12/09 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
新员工考核评语
2014/12/31 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
postgresql中如何执行sql文件
2023/05/08 PostgreSQL