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 相关文章推荐
phpmyadmin 常用选项设置详解版
Mar 07 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
PHP通过串口实现发送短信
Jul 08 PHP
关于PHP中Session文件过多的问题及session文件保存位置
Mar 17 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
java解析json方法总结
May 16 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 PHP
php pdo连接数据库操作示例
Nov 18 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编程与应用
2006/10/09 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
学习php分页代码实例
2013/10/24 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
在Python中进行自动化单元测试的教程
2015/04/15 Python
python字典的常用操作方法小结
2016/05/16 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
Python单元测试简单示例
2018/07/03 Python
python url 参数修改方法
2018/12/26 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
国贸专业自荐信范文
2014/03/02 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
2014年接待工作总结
2014/11/26 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
可怜妈妈观后感
2015/06/09 职场文书
复活读书笔记
2015/06/29 职场文书
总经理年会致辞
2015/07/29 职场文书
情人节单身感言
2015/08/03 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python