node.js - NodeJS Crypto randomBytes 到字符串十六进制加倍大小
问题描述
我在使用 NodeJS 加密和 crypto.randomBtyes 函数时遇到了一个奇怪的问题。我检测到似乎最近才出现在我的 NodeJS / Typescript 3.2 应用程序中的奇怪行为。
该错误本身就有意义:Cipheriv.createCipherBase (internal/crypto/cipher.js:79:18) 处的密钥长度无效
检查返回的密钥长度后,请求的字节数增加了一倍。我说这是“奇怪的”,因为它以前在工作(截至上周星期四/星期五(3/7/2019 - 3/8/2019)但截至今天早上检测到新行为。但是,我没有不运行任何更新,因为希望我遗漏了一些明显的东西。我可以将我的密钥大小更改为我想要的一半,但是,我想看看在我实施黑客攻击之前我是否忽略了一些简单的事情。
这是我的加密实现的一个相当基本的示例。
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/
任何帮助将不胜感激。
解决方案
GenerateRandomBytesToHex
函数返回一个 X 字节长的哈希值,String
其中每个字节都以十六进制值显示。
该数字的十六进制42
值为0x2A
。您可以看到一个字节(从 0 到 254)使用 2 个十六进制字符显示。所以 32 字节显示为 64 个字符是正常的。
推荐阅读
- openmdao - 计算雅可比向量积时出错
- java - 如何从地图中的集合中删除元素
- python-3.x - Pandas 将日期索引从 2061 年固定到 1961 年
- spring - 从 SpringBootTest 中排除配置类
- shell - 在 Tcl 中打开文件,里面有变量
- javascript - 如何按属性过滤对象数组
- flutter - Flutter:了解小部件、元素和渲染树
- android - 在片段中实现 ListView 的问题 (Kotlin)
- javascript - 如何在 Javascript 正则表达式中使用 {{ }}
- c++ - 如何从包含原始数据的数组或(向量、列表等)中绘制频谱图?