node.js - 散列字符串与散列 UInt8Array
问题描述
我正在比较两个 MD5 库的性能。当我向他们发送一个字符串时,他们返回相同的哈希值:
Hashing data with 'md5' library...
Hash: d8b1e68f2f36743cdf302ed36f9347dc
Duration: 0.003s
Hashing data with 'create-hash' library...
Hash: d8b1e68f2f36743cdf302ed36f9347dc
Duration: 0.003s
但是,当我向他们发送相同的 UInt8Array 时,他们会给我不同的哈希值:
Hashing data with 'md5' library...
Hash: 77fcf76d3f8c6a0f685f784d7ca6c642
Duration: 0.001s
Hashing data with 'create-hash' library...
Hash: 0ee0646c1c77d8131cc8f4ee65c7673b
Duration: 0s
为什么会这样?
const hashData = (name, hashingFunction, data) => {
console.log(`\t Hashing data with '${name}' library...`)
const start = new Date()
const hash = hashingFunction(data)
const end = new Date()
console.log(`\t\t Hash: ${hash}`)
const duration = (end - start) / 1000
console.log(`\t\t Duration: ${duration}s`)
console.log()
}
const runHashes = (data) => {
const hashWithMD5 = (data) => {
const md5 = require('md5')
return md5(data)
}
const hashWithCreateHash = (data) => {
return require('create-hash')('md5').update(data).digest('hex')
}
hashData('md5', hashWithMD5, data)
hashData('create-hash', hashWithCreateHash, data)
}
console.log('*** Running hashes on strings... *** \n')
runHashes("I want you to hash me...")
console.log('*** Running hashes on UInt8Array... *** \n')
runHashes(new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]))
解决方案
根据md5
模块 API 文档,散列函数接受 aString
或 a Buffer
。您的输入Uin8Array
两者都不是,所以我猜测与给定正确类型输入的明确定义的输出相比,散列的行为将是相对不确定的。
推荐阅读
- java - 显示特定目录中的所有图像
- php - PHP Session:不启动检查
- sql-server - SQL:使用 XML 作为输入进行内连接
- javascript - 日期时间,错误的日期和月份
- python - SQL Alchemy 级联删除 - 我错过了什么?
- javascript - 我不明白注册的原因。表达式不起作用
- javascript - 如何在不重新加载页面的情况下重新加载验证码
- azure - 为什么这个简单的 Go 服务器不在 Azure 应用服务中运行?
- powershell - PS 脚本未通过电子邮件发送格式正确的输出
- git - Git Rebase -> 为什么拉的时候有合并?