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