前言
这是一种非对称式加密,很适合用在前端与后端的通信上
它分为公钥和私钥,公钥仅可用于加密,私钥用于解密
这样一来就可以将公钥发送给客户端,客户端拿着公钥加密后返回给服务器,服务器再使用私钥进行解密
我小程序也采用了这种加密方式给需要的大佬借鉴一下
首先是php端代码(后端或者服务器端),这里使用了base64_decode和url解码,因为我前端也进行了相应的编码
教程
我们需要先生成一个密钥
在线RAS密钥生成:https://www.lddgo.net/encrypt/rsa
// 解密
function Rsa_decrypts($data)
{
// 加载openssl扩展
if (!extension_loaded('openssl')) {
die('OpenSSL 扩展未加载');
}
// 密钥文件路径
$privateKeyFile = '改为自己路径private_key.pem';
$publicKeyFile = '改为自己路径public_key.pem';
// 加载私钥
$privateKeyResource = openssl_pkey_get_private(file_get_contents($privateKeyFile));
if ($privateKeyResource === false) {
return '无法加载私钥';
}
$data=urldecode($data);
$data=base64_decode($data);
$decryptedText = '';
if (openssl_private_decrypt(base64_decode($data), $decryptedText, $privateKeyResource, OPENSSL_PKCS1_PADDING) === false) {
return '';
}
return $decryptedText;
}
然后我们开始在微信小程序安装一下相应的库
- 选择小程序的调试器 —— 选择终端 —— 输入npm i wxmp-rsa -S进行安装
- 安装完成后小程序目录里面会生成node_modules文件夹,里面会有wxmp-rsa文件夹
- 安装完成后在编辑器左上角的菜单栏中找到工具 —— 构建npm
- 完成后小程序文件目录会构建出miniprogram_npm文件夹,里面会有wxmp-rsa文件夹
然后将你就可以开始使用了,下面是一个参考示例,同样这里我使用了Base64和url编码,./base64.js可以百度下载一个,如果不需要移除即可,这样就可以实现小程序与后端的加密通讯了,但是需要注意数据长度不能超过太长!否则将加密失败!
// 导入包
import WxmpRsa from 'wxmp-rsa'
const Base64 = require('./base64.js');
// 实例化rsa
const rsa = new WxmpRsa()
rsa.default_key_size = 512
const publicKey = "这里放公钥"
// 加密
function encrypt(data) {
if (typeof data != 'string') {
data = data.toString()
}
if (data == '') {
return ''
}
if (publicKey != "") {
rsa.setPublicKey(publicKey)
const cryptStr = rsa.encryptLong(data)
var r = Base64.encode(cryptStr)
var r = encodeURIComponent(r)
return r
}
return ''
}
//暴露接口
module.exports = {
encrypt,
UPglobalData,
}
评论 (0)