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 相关文章推荐
用PHP+MySql编写聊天室
Oct 09 PHP
java EJB 加密与解密原理的一个例子
Jan 11 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
如何用C语言编写PHP扩展的详解
Jun 13 PHP
PHP COOKIE及时生效的方法介绍
Feb 14 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
laravel5.6实现数值转换
Oct 23 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+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
js function使用心得
2010/05/10 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
jquery中radio checked问题
2015/03/16 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
Python函数嵌套实例
2014/09/23 Python
详解Python中for循环的使用
2015/04/14 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
对Python中range()函数和list的比较
2018/04/19 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
计算机应用毕业生自荐信
2013/10/23 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
课外活动总结
2015/02/04 职场文书
青年教师个人总结
2015/02/11 职场文书
加薪申请报告范本
2015/05/15 职场文书
Python基础教程,Python入门教程(超详细)
2021/06/24 Python