哈希字符串vs哈希UInt8Array

问题描述 投票:1回答:1

我正在比较两个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.js hash md5
1个回答
0
投票

基于md5 module API documentation,哈希函数接受md5String。您输入的Buffer都不是,因此我猜想与正确输入给定的明确定义的输出相比,哈希的行为将相对不确定。

© www.soinside.com 2019 - 2024. All rights reserved.