如何从给定的长HEX哈希生成(在JavaScript或Node.JS中)从0.00000000-100.00000000范围内的浮点数?例如SHA-256?

我愿意使用crypto库解决方案,因为我使用它来生成给定的哈希值:)

最佳答案

如果您不担心精度损失,并且您的十六进制字符串具有固定长度(与SHA-256一样),则可以简单地从一个值空间映射到另一个值空间:

function hexStrToFraction(hexStr) {
    // Expresses a hexadecimal string of N characters as a fraction
    // of one above its maximum possible value (16^N).
    // Returns a number between 0 and 1.
    return parseInt(hexStr, 16) / Math.pow(16, hexStr.length);
}

function sha256ToPercent(sha256) {
    return 100 * hexStrToFraction(sha256);
}


请注意,精度损失高得足以使大多数SHA-256冗余:

var a = 'b2339969703a8c4b49e4a5c99cca6013ed455f52d06f8f03adb927aee7d9c3c0'
var b = 'b2339969703a8c8b8504772b860b9ed2cb6aa0186ff6750981e7ccd5344e4bf1'
//                     ^ differences start here
hexStrToFraction(a) === hexStrToFraction(b) // evaluates true

09-06 02:48