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 相关文章推荐
将数字格式的计算结果转为汉字格式
Oct 09 PHP
PHP面向对象编程快速入门
Dec 14 PHP
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
基于PHP常用函数的用法详解
May 10 PHP
php设计模式之简单工厂模式详解
Sep 04 PHP
smarty中改进truncate使其支持中文的方法
May 30 PHP
php自动载入类用法实例分析
Jun 24 PHP
php数组指针操作详解
Feb 14 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
PHP实现链表的定义与反转功能示例
Jun 09 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
php类中的各种拦截器用法分析
2014/11/03 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
jQuery基础知识小结
2014/12/22 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
python解析xml文件操作实例
2014/10/05 Python
python用户管理系统的实例讲解
2017/12/23 Python
Python matplotlib生成图片背景透明的示例代码
2019/08/30 Python
python文件路径操作方法总结
2020/12/21 Python
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
简单的大学生自我鉴定
2014/02/18 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
超越自我演讲稿
2014/05/21 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
公司开业主持词
2015/07/02 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL
Python内置的数据类型及使用方法
2022/04/13 Python