使用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/
任何帮助将不胜感激。
答案 0 :(得分:1)
GenerateRandomBytesToHex
函数将返回String
内X字节长的哈希,其中每个字节以十六进制值显示。
数字42
的十六进制值为0x2A
。您可以看到一个字节的(从0到254)使用2个十六进制字符显示。因此,将32字节显示为64个字符是正常的。