微信小游戏基础库2.17.3开始支持获取用户加密模块, 在接入的过程遇到了一些问题, 在这里记录一下
加密库的选择
主流的有crypto-js, 包含各种对称和非对称以及哈希算法, 包体比较大, 需求只用到aes
算法, 所以选择了aes-js
aes-js
在不g-zip
时占用大约40kb
的包体, 分析源码后发现里面一些加密需要用到的常量占用体积比较大, 可通过后端接口拿到这些常量
数据格式
通过userCryptoManager.getLatestUserKey
获取的key
和iv
需要调用aesjs.utils.utf8.toBytes
转为byte
补位
使用cbc
模式遇到报错invalid plaintext size (must be multiple of 16 bytes)
, 此时可以把需要加密的信息进行数据填充, 保证数据分组的长度固定
// 文本转byte
let textByte = aesjs.utils.utf8.toBytes(text)
// 补位, cbc需要16的整数倍
textByte = aesjs.padding.pkcs7.pad(textByte)