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下常用正则表达式整理
Oct 26 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
PHP Switch 语句之学习笔记
Sep 21 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
smarty实现多级分类的方法
Dec 05 PHP
使用PHP实现阻止用户上传成人照片或者裸照
Dec 25 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
Sep 14 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
Smarty3配置及入门语法
Feb 22 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 PHP
浅谈laravel aliases别名的原理
Oct 24 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
使用php实现截取指定长度
2013/08/06 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
javascript之ESC(第二类混淆)
2007/05/06 Javascript
用js遍历 table的脚本
2008/07/23 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
python中的列表与元组的使用
2019/08/08 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
幼儿园教师培训方案
2014/02/04 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
关于旅游的活动方案
2014/08/15 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
护理工作个人总结
2015/03/03 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技