node.js - 来自 MD5 库的不同结果
问题描述
我需要使用 MD5 散列一些数据。我想测试不同库的性能。但是,我注意到我得到了相同数据的不同哈希值,具体取决于所使用的库:
Generating data...
Hashing data with 'md5' library...
Hash: 1b37c84ebc8426e19d3b1797b6e320c6
Duration: 0.848s
Hashing data with 'object-hash' library...
Hash: f046296e8016b5632e6a1d1ebc885892
Duration: 0.032s
Hashing data with 'create-hash' library...
Hash: 1b37c84ebc8426e19d3b1797b6e320c6
Duration: 0.023s
我本来希望两个库都显示相同的哈希值。有任何想法吗?我的代码如下...
const generateData = () => {
console.log('Generating data...')
let data = "";
for (let i = 0; i < 1000000; i++) {
data += "1234567890";
}
console.log()
return data;
}
const convertToUInt8Array = (s) => {
var result = [];
for(var i = 0; i < s.length; i+=2)
{
result.push(parseInt(s.substring(i, i + 2), 16));
}
result = Uint8Array.from(result)
return result;
}
const hashData = (name, hashingFunction, data) => {
console.log(`Hashing data with '${name}' library...`)
const start = new Date()
const hash = hashingFunction(data)
const end = new Date()
console.log(`\t Hash: ${hash}`)
const duration = (end - start) / 1000
console.log(`\t Duration: ${duration}s`)
console.log()
}
const hashWithMD5 = (data) => {
const md5 = require('md5')
return md5(data)
}
const hashWithObjectHash = (data) => {
const objectHash = require('object-hash')
return objectHash.MD5(data)
}
const hashWithCreateHash = (data) => {
const createHash = require('create-hash')
const hash = createHash('md5')
hash.update(data)
return hash.digest('hex')
}
const data = generateData()
hashData('md5', hashWithMD5, data)
hashData('object-hash', hashWithObjectHash, data)
hashData('create-hash', hashWithCreateHash, data)
解决方案
object-hash
散列对象,而不是字符串值。实施前置_
'string:' + string.length + ':'
到输入字符串并对其进行 MD5 哈希处理。您可以通过修改hashWithCreateHash
以生成相同输入的哈希来确认这一点:
const hashWithCreateHash = (data) => {
const createHash = require('create-hash')
const hash = createHash('md5')
hash.update(`string:${data.length}:${data}`) // instead of hash.update(data)
return hash.digest('hex')
}
Hashing data with 'create-hash' library...
Hash: f046296e8016b5632e6a1d1ebc885892
Duration: 0.023s
推荐阅读
- javascript - Intersection Observer API 不适用于隐藏元素
- javascript - 从 onCall firebase 云函数返回一个字符串
- c++ - C++ 模板实例作为函数参数和 lambda 二进制谓词
- neural-network - 我正在尝试在 python 中构建神经网络
- sql-server - 在 ASP.NET Core MVC 中,如何将分页 WebAPI 中的所有记录提取到 SQL Server 数据库中?
- python - 多线程 python count week days 几个数据集
- javascript - 可点击行内的按钮正在激活行突出显示
- .net - Restsharp 在服务器上运行时引发 SSL 错误
- mips - MIPS 管道停顿:LW 之后的 SW
- java - 获取 AccessibilityNodeInfo 的文本颜色