[网络安全] 微信小游戏接入加密

980 阅读1分钟

微信小游戏基础库2.17.3开始支持获取用户加密模块, 在接入的过程遇到了一些问题, 在这里记录一下

加密库的选择

主流的有crypto-js, 包含各种对称和非对称以及哈希算法, 包体比较大, 需求只用到aes算法, 所以选择了aes-js

aes-js在不g-zip时占用大约40kb的包体, 分析源码后发现里面一些加密需要用到的常量占用体积比较大, 可通过后端接口拿到这些常量

数据格式

通过userCryptoManager.getLatestUserKey获取的keyiv需要调用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)