敏感数据处理
收藏
我的收藏

名词定义

敏感数据

开发者通过 getUserProfile接口或 button 组件请求到的敏感数据。

session_key

开发者通过code2session接口得到的session_key

校验数据合法性

请求到敏感数据时,返回的 signature 字段是在小程序服务器端通过如下算法得到:
signature = sha1(`${rawData}${session_key}`)
开发者可以在自己的服务器端执行同样的算法,来校验数据是否合法。

解密敏感数据

    1.对称解密使用的算法为 AES-128-CBC,数据采用 PKCS#7 填充。
    2.对称解密的目标密文为 encryptedData,即敏感数据。
    3.对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 长度为 16Byte。
    4.对称解密算法初始向量为 Base64_Decode(iv)

解密敏感数据代码示例

Node.js
Go
Python
Java
const crypto = require("crypto"); function decrypt(encryptedData, sessionKey, iv) { const decipher = crypto.createDecipheriv( "aes-128-cbc", Buffer.from(sessionKey, "base64"), Buffer.from(iv, "base64") ); let ret = decipher.update(encryptedData, "base64"); ret += decipher.final(); return ret; }

Bug&Tip

    Java 不支持 PKCS7Padding,只支持 PKCS5Padding,虽然名字不同,但是算法相同。