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的类 功能齐全的发送邮件类
Oct 09 PHP
PHP操作mysql函数详解,mysql和php交互函数
May 19 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
php数组合并的二种方法
Mar 21 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
php array_merge_recursive 数组合并
Oct 26 PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
Apr 02 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 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
用ODBC的分页显示
2006/10/09 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
js实现缓动动画
2020/11/25 Javascript
python 获取et和excel的版本号
2009/04/09 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
python数据化运营的重要意义
2019/11/25 Python
Python库安装速度过慢解决方案
2020/07/14 Python
Python设计密码强度校验程序
2020/07/30 Python
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
大学生见习报告范文
2014/11/03 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby
tree shaking对打包体积优化及作用
2022/07/07 Java/Android