Node.js crypto.randomBytes不接受md5生成的utf8字符串
我的代码如下所示:Node.js crypto.randomBytes不接受md5生成的utf8字符串,node.js,encryption,hash,encoding,utf-8,Node.js,Encryption,Hash,Encoding,Utf 8,我的代码如下所示: let createCipher = (req, res) => { const token = req.body.token; let keyVal = req.body.keyVal; const codeToken = utf8.encode(token); keyVal = utf8.encode(keyVal); console.log("keyVal " + keyVal); let hash = crypto
let createCipher = (req, res) => {
const token = req.body.token;
let keyVal = req.body.keyVal;
const codeToken = utf8.encode(token);
keyVal = utf8.encode(keyVal);
console.log("keyVal " + keyVal);
let hash = crypto.createHash('md5').update(codeToken).digest('hex');
console.log("hash " + hash);
var sharedSecret = crypto.randomBytes(hash);
var initializationVector = crypto.randomBytes(hash);
console.log("iv " + initializationVector);
var encrypted;
cipher = crypto.Cipheriv('aes-128-cbc', sharedSecret, initializationVector);
encrypted += cipher.update(keyVal, 'utf8', 'base64');
encrypted += cipher.final('base64');
res.json({
status: '200',
cipher: encrypted
});
}
TypeError: size must be a number >= 0
<br> at TypeError (native)
<br> at createCipher (C:\Users\anand\quFlipApi\controller\test.js:17:31)
<br> at Layer.handle [as handle_request] (C:\Users\anand\quFlipApi\node_modules\express\lib\router\layer.js:95:5)
<br> at trim_prefix (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:317:13)
<br> at C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:284:7
<br> at Function.process_params (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:335:12)
<br> at next (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:275:10)
<br> at C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:635:15
<br> at next (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:260:14)
<br> at Function.handle (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:174:3)
<br> at router (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:47:12)
<br> at Layer.handle [as handle_request] (C:\Users\anand\quFlipApi\node_modules\express\lib\router\layer.js:95:5)
<br> at trim_prefix (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:317:13)
<br> at C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:284:7
<br> at Function.process_params (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:335:12)
<br> at next (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:275:10)
<br> at C:\Users\anand\quFlipApi\node_modules\body-parser\lib\read.js:129:5
<br> at invokeCallback (C:\Users\anand\quFlipApi\node_modules\raw-body\index.js:262:16)
<br> at done (C:\Users\anand\quFlipApi\node_modules\raw-body\index.js:251:7)
<br> at IncomingMessage.onEnd (C:\Users\anand\quFlipApi\node_modules\raw-body\index.js:307:7)
<br> at emitNone (events.js:86:13)
<br> at IncomingMessage.emit (events.js:185:7)
我已经按照下面给出的步骤编写了上述代码:
let createCipher = (req, res) => {
const token = req.body.token;
let keyVal = req.body.keyVal;
const codeToken = utf8.encode(token);
keyVal = utf8.encode(keyVal);
console.log("keyVal " + keyVal);
let hash = crypto.createHash('md5').update(codeToken).digest('hex');
console.log("hash " + hash);
var sharedSecret = crypto.randomBytes(hash);
var initializationVector = crypto.randomBytes(hash);
console.log("iv " + initializationVector);
var encrypted;
cipher = crypto.Cipheriv('aes-128-cbc', sharedSecret, initializationVector);
encrypted += cipher.update(keyVal, 'utf8', 'base64');
encrypted += cipher.final('base64');
res.json({
status: '200',
cipher: encrypted
});
}
TypeError: size must be a number >= 0
<br> at TypeError (native)
<br> at createCipher (C:\Users\anand\quFlipApi\controller\test.js:17:31)
<br> at Layer.handle [as handle_request] (C:\Users\anand\quFlipApi\node_modules\express\lib\router\layer.js:95:5)
<br> at trim_prefix (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:317:13)
<br> at C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:284:7
<br> at Function.process_params (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:335:12)
<br> at next (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:275:10)
<br> at C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:635:15
<br> at next (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:260:14)
<br> at Function.handle (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:174:3)
<br> at router (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:47:12)
<br> at Layer.handle [as handle_request] (C:\Users\anand\quFlipApi\node_modules\express\lib\router\layer.js:95:5)
<br> at trim_prefix (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:317:13)
<br> at C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:284:7
<br> at Function.process_params (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:335:12)
<br> at next (C:\Users\anand\quFlipApi\node_modules\express\lib\router\index.js:275:10)
<br> at C:\Users\anand\quFlipApi\node_modules\body-parser\lib\read.js:129:5
<br> at invokeCallback (C:\Users\anand\quFlipApi\node_modules\raw-body\index.js:262:16)
<br> at done (C:\Users\anand\quFlipApi\node_modules\raw-body\index.js:251:7)
<br> at IncomingMessage.onEnd (C:\Users\anand\quFlipApi\node_modules\raw-body\index.js:307:7)
<br> at emitNone (events.js:86:13)
<br> at IncomingMessage.emit (events.js:185:7)
TypeError:大小必须是一个数字=0
at TypeError(本机)
在CreateChipher(C:\Users\anand\quFlipApi\controller\test.js:17:31)
在Layer.handle[作为handle\u请求](C:\Users\anand\qufipapi\node\u modules\express\lib\router\Layer.js:95:5)
在trim_前缀处(C:\Users\anand\qufipapi\node_modules\express\lib\router\index.js:317:13)
位于C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:284:7
在Function.process_参数处(C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:335:12)
下一步(C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:275:10)
在C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:635:15
下一步(C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:260:14)
位于Function.handle(C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:174:3)
在路由器上(C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:47:12)
在Layer.handle[作为handle\u请求](C:\Users\anand\qufipapi\node\u modules\express\lib\router\Layer.js:95:5)
在trim_前缀处(C:\Users\anand\qufipapi\node_modules\express\lib\router\index.js:317:13)
位于C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:284:7
在Function.process_参数处(C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:335:12)
下一步(C:\Users\anand\qufipapi\node\u modules\express\lib\router\index.js:275:10)
在C:\Users\anand\qufipapi\node\u modules\body parser\lib\read.js:129:5
在invokeCallback(C:\Users\anand\quFlipApi\node\u modules\raw body\index.js:262:16)
完成时(C:\Users\anand\qufipapi\node\u modules\raw body\index.js:251:7)
在IncomingMessage.onEnd(C:\Users\anand\qufipapi\node\u modules\raw body\index.js:307:7)
在emitNone(events.js:86:13)
在IncomingMessage.emit(events.js:185:7)
这里我的代码不接受从
crypto.randomBytes(hash)
中的上一步生成的散列。此执行过程中是否缺少任何方法?crypto.randomBytes
,并返回名称所示的随机字节
不能给它一个字符串作为参数
我真的不明白,为什么要生成两倍的随机字节。也许这就足够了
let hash = crypto.createHash('md5').update(codeToken).digest();
console.log("hash" + hash.toString('hex'));
var initializationVector = crypto.randomBytes(16);
console.log("iv " + initializationVector);
var encrypted = crypto.Cipheriv('aes-128-cbc', hash, initializationVector);
但是,我如何才能像我在步骤中提到的那样传递key和iv呢?我不知道你的算法,所以这里有一个猜测。我尝试了你的代码,但它给了我错误。我已经在我的代码中更新了算法步骤,那么代码是否符合该算法?@Mthaker我修复了代码中的大小问题(十六进制编码的MD5哈希长度为32字节,而不是16字节)。IV必须是不可预测的(读取:随机)。不要使用静态IV或从密钥派生的IV(在本例中是相同的),因为这会使密码具有确定性,因此在语义上不安全。观察密文的攻击者可以确定以前何时发送相同的消息前缀。IV不是秘密,所以你可以把它和密文一起发送。通常,它只是在密文前面加上前缀并在解密之前切掉。“crypto.randomBytes不接受md5生成的utf8字符串”-您认为它为什么应该这样做
crypto.randomBytes
生成,因为名称已经表示随机字节。您可以给出的唯一输入是它应该生成的字节数。你想通过它实现什么?AES-128-CBC需要一个16字节的密钥和一个16字节的IV。您将生成的密钥存储在哪里?