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索引问题
Jun 07 PHP
php Static关键字实用方法
Jun 04 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
浅析php header 跳转
Jun 17 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
PHP时间和日期函数详解
May 08 PHP
PHP7.0安装笔记整理
Aug 28 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
Feb 10 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 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+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
JS验证不重复验证码
2017/02/10 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
NumPy 数组使用大全
2019/04/25 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
学习和使用python的13个理由
2019/07/30 Python
Python实现微信机器人的方法
2019/09/06 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
python实现程序重启和系统重启方式
2020/04/16 Python
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
微电影大赛策划方案
2014/06/05 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
三严三实心得体会范文
2014/10/13 职场文书
批评与自我批评总结
2014/10/17 职场文书