当前位置:首页 > PHP > 正文内容

php非对称加密

高老师8年前 (2017-12-10)PHP2149

先在centos安装openssl,然后开始:

//生成私钥

openssl genrsa -out rsa_private_key.pem 1024

//生成公钥

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

//将私钥和公钥文件放在网站目录开始测试

<?php
//请开启php-openssl扩展
$privatefile='rsa_private_key.pem';
$publicfile ='rsa_public_key.pem';

//获取私钥
$privateKey=openssl_pkey_get_private(file_get_contents($privatefile));
//获取公钥
$publicKey = openssl_pkey_get_public(file_get_contents($publicfile));      
if(!($privateKey && $publicKey)){
	exit('私钥或公钥不可用!');
}



//加密前的数据.加密传输订单编号
$orderid='MH201712091500107100';



//加密后的数据.用于网络中的传输.提前定义为空
$resorderid='';
//开始用私钥加密
if (openssl_private_encrypt($orderid, $resorderid, $privateKey)) {      
      
    /**    
     * 加密后可以base64_encode后方便在网址中传输或者打印,否则打印为乱码    
     */      
   echo '加密后'.base64_encode($resorderid)."\r\n";      
      
} else {      
    die('加密失败');      
}     



//解密后的数据,提前定义为空
$backorderid='';
//开始用公钥解密
if (openssl_public_decrypt($resorderid, $backorderid, $publicKey)) {      
      
    echo '解密后'.$backorderid."\r\n";      
      
} else {      
    die('解密失败');      
}   

?>

您也可以使用公钥加密,私钥解密。

注意:

(1).php里openssl只能用pem格式文件

(2).php使用PKCS#8格式的公钥或者私钥,例如微信支付企业打款到个人银行卡提供的密钥是PKCS#1格式的公钥,需要通过以下命令转换

PKCS#1 转 PKCS#8: 
openssl rsa -RSAPublicKey_in -in <filename> -pubout 

PKCS#8 转 PKCS#1: 
openssl rsa -pubin -in <filename> -RSAPublicKey_out

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/49.html

分享给朋友:

“php非对称加密” 的相关文章

PHP获取原始数据

PHP获取原始数据

在项目中需要对图片进行裁剪,前端裁剪完成发送base64给后端,但是很意外的PHP获取到的数据和前端有点差距,之前我都是先加密,后端解密,但是这次依然不行。于是使用filter_input方法轻松解决。$base64 =  filter_input(INPUT_POST...

php上传大文件,php大文件上传

php上传大文件,php大文件上传

(1).前端文件:<form action="upload.php" method="post" enctype="multipart/form-data">    &...

Thinkphp Call Stack,PHP调用栈Call Stack的获取

Thinkphp Call Stack,PHP调用栈Call Stack的获取

ThinkPHP中有一个debug调试功能,能输出报错文件的信息,并能看到这个函数被哪些函数调用,从框架的启动开始记录,特别方便调试。于是研究了下它的底层给予了实现。<?php //--框架核心--Start //框架内置错误处理 function errDealWith($er...

php多进程实现任务管理器,定时执行任务,支持守护

php多进程实现任务管理器,定时执行任务,支持守护

主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /**  * 订单任务  */ class Order {    &n...

php redis队列实现秒杀 , php用redis 实现秒杀功能

php redis队列实现秒杀 , php用redis 实现秒杀功能

为什么使用队列?因为pop取队列具有原子性。假如我们需要秒杀一个商品id,我们先将商品的库存保存到一个队列。例如:<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6...

 thinkphp5定时任务,tp5定时任务,thinkphp定时任务,php定时任务,php定时器

thinkphp5定时任务,tp5定时任务,thinkphp定时任务,php定时任务,php定时器

本教程使用的定时任务基于EasyTak,EasyTask官方文档:https://gitee.com/392223903/EasyTask(1).安装tp5.0或者5.1composer create-project topthink/think=5.0.* tp5&n...