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

Cha*_*hur 3 node.js typescript node-crypto

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

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

在检查返回的密钥长度时,它将请求的字节数加倍。我将其表示为“奇怪”,因为它之前有效(截至上周星期四/星期五(3/7/2019 - 3/8/2019)但截至今天早上检测到新行为。但是,我没有t 运行任何更新,所以希望我错过了一些明显的东西。我可以将我的密钥大小更改为我想要的一半,但是,我想在实施黑客之前看看我是否忽略了一些简单的东西。

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

import crypto = require('crypto');

export class Encryption {
    static GenerateRandomBytesToHex(size: number): string {
        return crypto.randomBytes(size).toString('hex');
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在调用时:

let cipherKey = Encryption.GenerateRandomBytesToHex(32);
Run Code Online (Sandbox Code Playgroud)

它返回的是一个 64 个字符的字符串,而不是一个 32 个字符的字符串。

示例:c8a8437677fcfab679f92c8470ffc34b932f5aaa3296c09f652d2becfe1db8b2(长度为64个字符)

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

任何帮助将不胜感激。

Gré*_*EUT 6

GenerateRandomBytesToHex函数返回一个哈希值,该哈希值在 aString中的长度为 X 字节,其中每个字节都以十六进制值显示。

数的十六进制值420x2A。您可以看到使用 2 个十六进制字符显示1 个 Byte (从 0 到 254)。所以 32 Byte 显示为 64 个字符是正常的。


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

在此处输入图片说明