【发布时间】:2020-11-04 02:55:31
【问题描述】:
我正在开发一款游戏,该游戏将出于各种目的与 NodeJS 服务器进行通信,并且我目前正在尝试对请求有效负载实施一些 AES 加密。在服务器和用 JS 制作的测试工具之间进行测试时一切正常,但是当我尝试将客户端代码移植到另一种没有 Web Crypto / Subtle Crypto 实现的语言时,我开始收到有关 AES 密钥的错误长度。
查看它,我发现生成的 AES 密钥(通过 window.crypto.subtle.generateKey)是 176 位长,即使我指定 AES 密钥长度为 128。我正在以 JWK 格式导出密钥,而且很奇怪问题是算法被列为A128CBC,暗示它应该是128位。
因为无论如何我都会生成一个新密钥,所以我毫不犹豫地在这里发布有问题的导出 JWK:
{
"alg": "A128CBC",
"ext": true,
"k": "J3SQ0IjwlJnJwu0EadenLg",
"key_ops": [
"encrypt",
"decrypt"
],
"kty": "oct"
}
谁能解释这些额外的 6 个字节是从哪里来的?移植客户端上的 AES 实现需要 128 位密钥,如果不是 128 则只会抛出错误,从而使整个项目停止,直到解决此问题。
【问题讨论】:
标签: javascript encryption aes subtlecrypto