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

php非对称加密

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

先在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抽象类和接口作用

【一】.抽象类假设如下场景:团队准备开发某网站,表建好了,页面设计好了.A组负责开发底层数据库操作类(DB),B组负责调用DB类.但是此时A组发生了争执,MySQL? Oracle? DB2? sqlite?到底使用什么数据库?B组.... 进入漫长的等待.解决方法:A组和B组 先定1个数据库类的模...

【二】PHP多进程学习-进程信号管理

【二】PHP多进程学习-进程信号管理

(1).学习目标:    了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习:    (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...

swoole中的worker_num和task_worker_num

swoole中的worker_num和task_worker_num

(1)swoole启动的主进程是master进程负责全局管理,然后master进程会再fork一个manager进程。(2)manager进程开始统一管理进程创建回收管理。(3)manager进程根据设置的worker_num和task_worker_num来创建work进程和task进程因此启动s...

php迭代器返回值,php yield getReturn

php迭代器返回值,php yield getReturn

php生成器的方法getReturn获取生成器迭代完成后的返回值,当生成器迭代完成会将生成器的返回值返回,因此如果迭代器未进行迭代是获取不到值的,如果你没有return值则返回null,参考代码:<?php function G1() {    &nbs...

php位运算符详解

php位运算符详解

文章篇幅较长,如果不喜欢看文章的,此处抛出韩顺丰老师的位运算视频,韩老师应该是全网讲php位运算符最详细的一个老师了。链接:https://pan.baidu.com/s/14xj7er8eVSUcJ-jYXyA0GA  提取码:731m 链接:https://pan.baidu.com...

laravel定时任务,tp定时任务,thinkphp定时任务

laravel定时任务,tp定时任务,thinkphp定时任务

本文基于Laravel Framework 6.17.1版本(1).创建项目(依赖真多,如此臃肿)composer create-project --prefer-dist laravel/laravel blog(2).安装定时任务composer包&nbs...