折雨的天空
PHP使用RSA非对称加密算法加密通信数据
2019-9-7 我好笨


1、JS插件



在官网下载js,官网版本库:



https://github.com/travist/jsencrypt



引入bin下的一个js文件即可。







<script src="js/jsencrypt.min.js"></script>



2、提交数据时,进行加密







var encrypt = new JSEncrypt();
//使用公钥进行加密
encrypt.setPublicKey($("#public_key").val());
//加密
phone_data=encrypt.encrypt($("#phone").val());



3、PHP端,开启openssl,使用私钥进行解密







openssl_private_decrypt(base64_decode($string),$data,$pi_key);//私钥解密





注意事项:



网上代码:







https://www.cnblogs.com/wt645631686/p/8390936.html







PHP部分的生成私钥和公钥的部分可以直接用,但是生成私钥的地方有问题,主要还是openssl.cnf文件的配置问题。



windows下会出问题,而linux下不会,windows下的openssl.cnf文件默认在C盘,而我们的文件实际存放在PHP的ext目录下。







解决办法:







$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 4096, //字节数 512 1024 2048 4096 等
"private_key_type" => OPENSSL_KEYTYPE_RSA, //加密类型
"config" => "***/php7.3.4/extras/ssl/openssl.cnf",
);









$res = openssl_pkey_new($config);
if ( $res == false ){
return false;
}
openssl_pkey_export($res, $private_key, null, $config);
$public_key = openssl_pkey_get_details($res);
$public_key = $public_key["key"];
file_put_contents($path."/cert_public.key", $public_key);
file_put_contents($path."/cert_private.pem", $private_key);





注意:

openssl_pkey_export和openssl_pkey_export 两个函数都需要指定config,否则私钥会生成失败。

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容