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加MYSQL服务器
Oct 09 PHP
收集的php编写大型网站问题集
Mar 06 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
php在线代理转向代码
May 05 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
dedecms中使用php语句指南
Nov 13 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
Jan 05 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
PHP生成和获取XML格式数据的方法
Mar 04 PHP
PHP多维数组排序array详解
Nov 21 PHP
php实现大文件断点续传下载实例代码
Oct 01 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读取XML值的代码(推荐)
2011/01/01 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
python多任务及返回值的处理方法
2019/01/22 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
pytorch forward两个参数实例
2020/01/17 Python
如何使用python传入不确定个数参数
2020/02/18 Python
python爬虫工具例举说明
2020/11/30 Python
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
社区党建工作总结2015
2015/05/13 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
学习计划是什么
2019/04/30 职场文书
代码解析React中setState同步和异步问题
2021/06/03 Javascript