首页 > 解决方案 > 散列字符串与散列 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]))

标签: node.jshashmd5

解决方案


根据md5模块 API 文档,散列函数接受 aString或 a Buffer。您的输入Uin8Array两者都不是,所以我猜测与给定正确类型输入的明确定义的输出相比,散列的行为将是相对不确定的。


推荐阅读