NodeJS Crypto randomBytes 到字符串十六进制加倍大小

NodeJS Crypto randomBytes to string hex doubling size

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

The error makes sense in its own right: Invalid key length at Cipheriv.createCipherBase (internal/crypto/cipher.js:79:18)

检查返回的密钥长度后,它是请求的字节数的两倍。我将此表述为 "odd",因为它之前一直在工作(截至上周 Thursday/Friday (3/7/2019 - 3/8/2019),但截至今天早上,检测到新行为。但是,我没有 运行 任何更新,因为希望我遗漏了一些明显的东西。我可以将我的密钥大小更改为我想要的一半,但是,我想看看我之前是否忽略了一些简单的事情我实现了一个 hack。

这是我的加密实现的一个相当基本的示例。

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 个字符的字符串。

Example: c8a8437677fcfab679f92c8470ffc34b932f5aaa3296c09f652d2becfe1db8b2 (64 characters in length)

这是本文概述的概念的实现: http://vancelucas.com/blog/stronger-encryption-and-decryption-in-node-js/

如有任何帮助,我们将不胜感激。

GenerateRandomBytesToHex 函数 returns 您在 String 中创建了 X 字节长的散列,其中每个字节都以十六进制值显示。

数字42的十六进制值为0x2A。可以看到一个Byte (from 0 to 254)是用2个十六进制字符显示的。所以32个字节显示为64个字符是正常的。


示例:https://codebeautify.org/string-hex-converter