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

时间:2019-03-11 15:03:56

标签: node.js typescript node-crypto

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

  

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

检查返回的密钥长度后,它将请求的字节数加倍。我说这是“奇怪的”,因为它以前已经起作用了(截至上周四/周五(3/7/2019-3/8/2019),但是截至今天早上,新的行为已被发现。但是,我还没有t运行任何更新,因为希望如此,我希望丢失明显的东西。我可以将密钥大小更改为所需大小的一半,但是,我想看看在实施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个字符串。

  

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

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

GenerateRandomBytesToHex函数将返回String内X字节长的哈希,其中每个字节以十六进制值显示。

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


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

enter image description here