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 3行代码的分页算法(求起始页和结束页)
Oct 21 PHP
php 修改zen-cart下单和付款流程以防止漏单
Mar 08 PHP
一道求$b相对于$a的相对路径的php代码
Aug 08 PHP
flash用php连接数据库的代码
Apr 21 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
PHP实现合并discuz用户
Aug 05 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 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中curl、fsockopen的应用
2016/12/10 PHP
JavaScript 继承详解 第一篇
2009/08/30 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
浅析vue中的nextTick
2020/12/28 Vue.js
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
Ajax的优点和缺点
2014/11/21 面试题
学校后勤人员职责
2013/12/27 职场文书
护士节策划方案
2014/05/19 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
论文致谢词范文
2015/05/14 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers