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 db类库进行数据库操作
Mar 19 PHP
php连接数据库代码应用分析
May 29 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
Jun 13 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
Jul 14 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 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文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
判断控件是否已加载完成的代码
2010/02/24 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
js的对象与函数详解
2019/01/21 Javascript
python中的对象拷贝示例 python引用传递
2014/01/23 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
白鹤梁导游词
2015/02/06 职场文书
科技活动总结范文
2015/05/11 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers