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程序的方法
Mar 09 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
ThinkPHP权限认证Auth实例详解
Jul 22 PHP
PHP反向代理类代码
Aug 15 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 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
给多个地址发邮件的类
2006/10/09 PHP
PHP4和PHP5共存于一系统
2006/11/17 PHP
PHP Pear 安装及使用
2009/03/19 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
设定php简写功能的方法
2019/11/28 PHP
brook javascript框架介绍
2011/10/10 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
js实现计时器秒表功能
2019/12/16 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
Python实现遍历数据库并获取key的值
2015/05/17 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
django解决订单并发问题【推荐】
2019/07/31 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
Python2与Python3的区别详解
2020/02/09 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
Python日志器使用方法及原理解析
2020/09/27 Python
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
娱乐地球:Entertainment Earth
2020/01/08 全球购物
领导失职检讨书
2014/02/24 职场文书
入党积极分子考察意见
2015/06/02 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python