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
我在使用 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