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,否则私钥会生成失败。
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《PHP使用RSA非对称加密算法加密通信数据》
发表评论