Node.js NodeJS加密随机字节到字符串十六进制加倍大小

Node.js NodeJS加密随机字节到字符串十六进制加倍大小,node.js,typescript,node-crypto,Node.js,Typescript,Node Crypto,我在使用NodeJS crypto和crypto.randomBtyes函数时遇到了一个奇怪的问题。我检测到一些奇怪的行为,这些行为似乎最近才出现在我的NodeJS/Typescript 3.2应用程序中 错误本身就有意义:密钥长度无效 在Cipheriv.createCipherse(internal/crypto/cipher.js:79:18) 检查返回的密钥长度后,它将使请求的字节数加倍。我说这是“奇怪的”,因为它以前是工作的(截至上周周四/周五(2019年7月3日-2019年8月3日)

我在使用NodeJS crypto和crypto.randomBtyes函数时遇到了一个奇怪的问题。我检测到一些奇怪的行为,这些行为似乎最近才出现在我的NodeJS/Typescript 3.2应用程序中

错误本身就有意义:密钥长度无效 在Cipheriv.createCipherse(internal/crypto/cipher.js:79:18)

检查返回的密钥长度后,它将使请求的字节数加倍。我说这是“奇怪的”,因为它以前是工作的(截至上周周四/周五(2019年7月3日-2019年8月3日)但是到今天早上为止,新的行为被检测到。但是,我没有运行任何更新,因为我希望我遗漏了一些明显的东西。我可以将我的密钥大小更改为我想要的大小的一半,但是,我想在实施黑客攻击之前看看我是否忽略了一些简单的东西

下面是我的加密实现的一个相当基本的示例

import crypto = require('crypto');

export class Encryption {
    static GenerateRandomBytesToHex(size: number): string {
        return crypto.randomBytes(size).toString('hex');
    }
}
但是,在拨打电话时:

let cipherKey = Encryption.GenerateRandomBytesToHex(32);
它返回的是64个字符的字符串,而不是32个字符的字符串

例如: C8A8437677FCFAB679F92C8470FFC34B932F5AAA3296C09F652D2BECF1DB8B2(长度64个字符)

这是本文概述的概念的实现:


任何帮助都将不胜感激。

GenerateRandomBytesToHex
函数返回一个散列,该散列在
字符串
中,每个字节以十六进制值显示

数字
42
的十六进制值为
0x2A
。您可以看到一个字节(从0到254)以十六进制的2个字符显示。因此,32个字节显示为64个字符是正常的


例如:


感谢您的快速响应。我知道这必须是非常明显的。我正在计算初始化向量的字符长度作为基准,但由于它们是16个字节,所以在字符串('hex')时会加倍到32个字节是的,这给了我足够的一个红鲱鱼去脑死亡。答案很完美,应该抓住它!再次感谢朋友!