当前位置: 首页 > news >正文

PHP 运用rsa加密和解密实例

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放在这个文件夹中

转载于:https://www.cnblogs.com/anyefrozen/p/4222206.html

相关文章:

  • 个人犯的一个golang routine错误
  • (简单) HDU 2612 Find a way,BFS。
  • ZeroMQ接口函数之 :zmq_bind - 绑定一个socket
  • Objective - C基础: 第三天 - 1.NSString的基本认识
  • Windows Store App JavaScript 开发:页内导航
  • IOS 消息机制(NSNotificationCenter)
  • DataMatrix二维条码源码分析检测识别图像位置
  • 图像切割之(一)概述
  • 关于HTML5本地存储的sessionStorage与localStorage的简单用法
  • 论存储IOPS和Throughput吞吐量之间的关系
  • Objective - C基础: 第五天 - 6.循环引用
  • 服务器的编码
  • Jquery scrollTop animate 實現動態滾動到頁面頂部
  • 多站点IIS用户安全权限设置图解教程
  • c#将http调用返回额json中的有关中文的unicode转换为中文(转)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • DataBase in Android
  • emacs初体验
  • Facebook AccountKit 接入的坑点
  • Java的Interrupt与线程中断
  • Laravel 菜鸟晋级之路
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Puppeteer:浏览器控制器
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpingCloudBus整合RabbitMQ
  • Terraform入门 - 1. 安装Terraform
  • 从伪并行的 Python 多线程说起
  • 讲清楚之javascript作用域
  • 理解在java “”i=i++;”所发生的事情
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 手机端车牌号码键盘的vue组件
  • 微服务核心架构梳理
  • 移动端 h5开发相关内容总结(三)
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (七)理解angular中的module和injector,即依赖注入
  • (一) storm的集群安装与配置
  • (转)甲方乙方——赵民谈找工作
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net 高效开发之不可错过的实用工具
  • .net 使用ajax控件后如何调用前端脚本
  • .NET开发者必备的11款免费工具
  • .net中调用windows performance记录性能信息
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • .sh
  • @GetMapping和@RequestMapping的区别
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [2018-01-08] Python强化周的第一天
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [Android]通过PhoneLookup读取所有电话号码