wx.getUserInfo encrypteddata 解密
时间: 2023-08-31 09:05:17 浏览: 99
在小程序中使用 `wx.getUserInfo` 获取到用户信息后,其中的 `encryptedData` 是经过加密的,需要进行解密才能获取到原始数据。
解密的过程需要使用到小程序的 `session_key` 和 `iv`,其中 `session_key` 是通过调用小程序登录接口 `wx.login` 获取到的,而 `iv` 是在调用 `wx.getUserInfo` 时返回的。
解密的具体步骤如下:
1. 使用 base64 解码 `encryptedData` 和 `session_key`。
2. 使用 `session_key` 对 `encryptedData` 进行 AES 解密。
3. 解密后得到的数据是一个 JSON 字符串,需要进行 JSON 解析。
示例代码如下:
```javascript
const sessionKey = wx.getStorageSync('sessionKey'); // 从本地存储中获取 session_key
const encryptedData = e.detail.encryptedData;
const iv = e.detail.iv;
const encryptedDataBuffer = Buffer.from(encryptedData, 'base64');
const sessionKeyBuffer = Buffer.from(sessionKey, 'base64');
const ivBuffer = Buffer.from(iv, 'base64');
const decipher = crypto.createDecipheriv('aes-128-cbc', sessionKeyBuffer, ivBuffer);
decipher.setAutoPadding(true);
let decoded = decipher.update(encryptedDataBuffer, 'binary', 'utf8');
decoded += decipher.final('utf8');
const userInfo = JSON.parse(decoded);
console.log(userInfo);
```
需要注意的是,解密过程中需要使用 Node.js 的 `crypto` 模块,因此在小程序中需要先使用 `npm` 安装该模块。同时,由于小程序中没有 `Buffer` 对象,因此需要使用第三方库 `base64-js` 来进行 base64 编解码。
阅读全文