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

php非对称加密

高老师7年前 (2017-12-10)PHP1944

先在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抽奖概率算法

<?php /*  *算法学习自百度.只是学习和记录  */ header("Content-type:text/html;charset=utf-8"); //1.设置奖项,id是奖项id,name是中奖名称,v是中奖概率 $arr =&n...

php解决浮点数精度问题

php解决浮点数精度问题

首先看看以下代码:代码1:<?php $a=0.1; $b=0.7; if($a+$b==0.8) { echo "1"; } else{ echo "2"; } ?>代码2:<?php   &n...

redis订阅和发布,redis消息订阅与发布, phpredis订阅和发布

redis订阅和发布,redis消息订阅与发布, phpredis订阅和发布

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...

php  RabbitMQ消息队列

php RabbitMQ消息队列

(1).config.php 配置文件<?php /**  * RabbitMQ_Config  */ $config = [     'host' => ...

php异步信号处理

php异步信号处理

php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){  //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...

packagist包发布稳定版

packagist包发布稳定版

自己的composer已经发布到packagist,但是无法使用composer require easy-task/easy-task来安装,只能在配置文件使用如下方式安装:"require": {     "easy...