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 11 PHP
php 字符过滤类,用于过滤各类用户输入的数据
May 27 PHP
PHP 可阅读随机字符串代码
May 26 PHP
php开发文档 会员收费1期
Aug 14 PHP
php自动加载autoload机制示例分享
Feb 20 PHP
ThinkPHP模版中导入CSS和JS文件的方法
Nov 29 PHP
php实现的美国50个州选择列表实例
Apr 20 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
php读取本地json文件的实例
Mar 07 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
May 09 PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 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/11/25 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
python操作oracle的完整教程分享
2018/01/30 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
python制作填词游戏步骤详解
2019/05/05 Python
Python求解正态分布置信区间教程
2019/11/20 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
Django实现celery定时任务过程解析
2020/04/21 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
我的求职计划书
2014/01/10 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
个人委托函范文
2015/01/29 职场文书
搞笑老公保证书
2015/02/26 职场文书
停发工资证明范本
2015/06/12 职场文书
PyMongo 查询数据的实现
2021/06/28 Python