php rsa加密解密使用详解


Posted in PHP onJanuary 14, 2015

1、加密解密的第一步是生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)

下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:

openssl genrsa -out rsa_private_key.pem 1024

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem
从上面看出通过私钥能生成对应的公钥,因此我们将私钥private_key.pem用在服务器端,公钥发放给android跟ios等前端

2、php中用生成的公钥、私钥进行加密解密,直接上代码

$fp=fopen("rsa/rsa_private_key.pem","r"); //你的私钥文件路径

$private_key=fread($fp,8192);

fclose($fp);

$fp1=fopen("rsa/rsa_public_key.pem","r"); //你的公钥文件路径

$public_key=fread($fp1,8192);

fclose($fp1);

//echo $private_key; 

$pi_key=openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id 

$pu_key=openssl_pkey_get_public($public_key );//这个函数可用来判断公钥是否是可用的

print_r($pi_key);echo "\n"; echo "<br>";

print_r($pu_key);echo "\n"; echo "<br>";

echo "<hr>";

$data='php ras加密算法';

$encrypted = ""; 

$decrypted = ""; 

echo "加密的源数据:".$data."\n"; echo "<br>";

echo "private key encrypt:\n"; echo "<br>";

openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密 

$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的 

echo '私钥加密后:'.$encrypted."\n"; echo "<br>";echo "<br>";

echo "public key decrypt:\n"; echo "<br>";

openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来 

echo '公钥解密后:'.$decrypted."\n"; echo "<br>";

echo "<hr>";

echo "public key encrypt:\n"; echo "<br>";

openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密 

$encrypted = base64_encode($encrypted); 

echo $encrypted,"\n"; echo "<br>";

echo "private key decrypt:\n"; echo "<br>";

openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密 

echo $decrypted,"\n"; echo "<br>";

PHP的RSA配置常见问题

●PHP开发语言的代码示例中openssl文件夹中的3个DLL文件用法

1、如果你的系统是windows系统,且system32文件目录下没有libeay32.dll、ssleay32.dll这两个文件
那么需要拷贝这两个文件到system32文件目录。

2、如果您的php安装目录下(php\ext)中没有php_openssl.dll

那么请把php_openssl.dll放在这个文件夹中

喜欢加密解密的小伙伴一定要好好看看这篇文章,受益匪浅。。。

PHP 相关文章推荐
Linux下ZendOptimizer的安装与配置方法
Apr 12 PHP
深入解析php之sphinx
May 15 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
MyEclipse常用配置图文教程
Sep 11 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
Jun 19 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 PHP
ThinkPHP 404页面的设置方法
Jan 14 #PHP
THINKPHP内容分页代码分享
Jan 14 #PHP
php+mysql删除指定编号员工信息的方法
Jan 14 #PHP
php实现redis数据库指定库号迁移的方法
Jan 14 #PHP
php导入excel文件到mysql数据库的方法
Jan 14 #PHP
php+mysql查询优化简单实例
Jan 13 #PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 #PHP
You might like
PHP的FTP学习(一)[转自奥索]
2006/10/09 PHP
PHP数据类型的总结分析
2013/06/13 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
PHP使用函数用法详解
2018/09/30 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
JQuery中getJSON的使用方法
2010/12/13 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
Cpy和Python的效率对比
2015/03/20 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python编写微信公众号首图思路详解
2019/12/13 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
师范大学生求职信
2014/06/13 职场文书
2015年六一儿童节活动方案
2015/05/05 职场文书
交心谈心活动总结
2015/05/11 职场文书