前言
此次应用在接口里面,用rsa加密和解密,如果你刚开始以为一套接口就可以完成前后端的数据交互,那么你是太年轻了,前后端交互,双向取数据时候,需要两套公钥和私钥。
1.前端通过第一套公钥加密要传递的请求参数
var encrypt = new JSEncrypt();
encrypt.setPublicKey(pubkey); // pubkey是公钥内容
var encrypted = encrypt.encrypt($data);//这里传递加密的值
2.php后端解密
$pi_k = openssl_pkey_get_private(config('prv_k'));//判断私钥是否可用
$decrypted = "";//存储解密的数据
openssl_private_decrypt(base64_decode($rsa_arr), $decrypted, $pi_k);//私钥解密
//其中$rsa_arr是前端传递加密后的值,$decrypted是解密后的值,$pi_k是私钥
3.php后端响应第二套公钥加密的数据
$rt_pu_key = openssl_pkey_get_public(config('ret_pub_key'));//判断公钥是否可用
$rt_data = '';
$arr = ['ret' => 1, 'msg' => 'success', 'data' => '测试连接成功test', 'errCode' => ''];
$arr = json_encode($arr);//变成字符串
openssl_public_encrypt($arr,$rt_data,$rt_pu_key);//公钥加密
4.js前端解密后端公钥加密的值
let decryptor = new JSEncrypt(); // 新建JSEncrypt对象
decryptor.setPrivateKey(PRIVATE_KEY); // 第二套私钥
const data = decryptor.decrypt(rsaDta); // 进行解密
console.log('解密后的数据:%o', data);//解密后的值
https://www.cnblogs.com/-mrl/p/10868254.html //window下opensll生成的方法
小结:通过rsa加密主要是防止网络传输过程中可能被截取的问题,用rsa加密后数据难以破解,除非公钥和私钥泄露了,最后前后端不再使用base64加密和解密,直接解密返回后端base64就可以了。
http://travistidwell.com/jsencrypt/# //JSEncrypt下载地址
<script src="https://cdn.bootcss.com/jsencrypt/3.0.0-beta.1/jsencrypt.js"></script> //也可以用cdn
补充:https://blog.csdn.net/sanyuedexuanlv/article/details/79697031 //链接转载解决大文本加密的问题