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 相关文章推荐
967 个函式
Oct 09 PHP
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
PHP Ajax中文乱码问题解决方法
Feb 27 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
WordPress中获取所使用的模板的页面ID的简单方法
Dec 31 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
Laravel学习教程之路由模块
Aug 18 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
May 02 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 PHP
PHP内存溢出优化代码详解
Feb 26 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中路径问题的解决方案
2006/10/09 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
JS面向对象编程详解
2016/03/06 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
switchery按钮的使用方法
2017/12/18 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
跟老齐学Python之关于类的初步认识
2014/10/11 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
Python input函数使用实例解析
2019/11/22 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
木工主管岗位职责
2013/12/08 职场文书
学校会议通知范文
2015/04/15 职场文书
同乡会致辞
2015/07/30 职场文书
python 离散点图画法的实现
2022/04/01 Python
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL