Node.js连续三次哈希(SHA256/SHA384/SHA512)代码正确性咨询
代码问题分析与修正
你的代码存在两个核心问题需要调整:
缺少crypto模块的引入
Node.js的crypto模块并非全局可用,必须通过require显式引入,否则运行时会抛出ReferenceError: crypto is not defined错误。哈希输入的编码逻辑需匹配需求
你的代码中,每次哈希后用digest("hex")生成十六进制字符串,下一次哈希时以hex编码解析该字符串——这相当于将前一次哈希的原始二进制结果作为下一次哈希的输入,这个逻辑本身是成立的,但前提是你的需求确实是基于二进制哈希值继续运算。
如果你的需求是把前一次的十六进制字符串当作普通UTF-8文本进行哈希,则需要将update的第二个参数改为"utf-8"。
修正后的完整代码
基于二进制哈希值继续哈希的版本(匹配你当前代码的逻辑)
const crypto = require('crypto'); // 必须添加该引入语句 function findHash(password) { const hash_256 = crypto.createHash("sha256").update(password, "utf-8").digest("hex"); const hash_384 = crypto.createHash("sha384").update(hash_256, "hex").digest("hex"); return crypto.createHash("sha512").update(hash_384, "hex").digest("hex"); }
基于十六进制字符串文本哈希的版本
const crypto = require('crypto'); function findHash(password) { const hash_256 = crypto.createHash("sha256").update(password, "utf-8").digest("hex"); const hash_384 = crypto.createHash("sha384").update(hash_256, "utf-8").digest("hex"); return crypto.createHash("sha512").update(hash_384, "utf-8").digest("hex"); }
你可以根据实际需求选择对应版本,确保引入crypto模块是代码正常运行的必要前提。
内容的提问来源于stack exchange,提问作者user13019610
相关产品推荐
相关产品推荐

