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程序效率优化的一些策略小结
Jul 17 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
Jan 27 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
在wamp集成环境下升级php版本(实现方法)
Jul 01 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 PHP
php自动载入类用法实例分析
Jun 24 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
PHP输出Excel PHPExcel的方法
Jul 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
php max_execution_time执行时间问题
2011/07/17 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
vue项目中使用百度地图的方法
2018/06/08 Javascript
微信小程序实现录音功能
2019/11/22 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
python tornado微信开发入门代码
2018/08/24 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
护理专业毕业生自荐信范文
2014/01/05 职场文书
电子商务应届生自我鉴定
2014/01/13 职场文书
保安的辞职报告怎么写
2014/01/20 职场文书
会议活动邀请函
2014/01/27 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
年度考核个人总结
2015/03/06 职场文书
学术会议通知范文
2015/04/15 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL
AJAX实现省市县三级联动效果
2021/10/16 Javascript
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫