hash - 是否有任何通常被认为值得信赖的 SHA-256 javascript 实现?

标签 hash javascript sha256 sha2

<分区>

我正在为论坛编写登录名,需要在将密码发送到服务器之前在 javascript 中对客户端进行哈希处理。我无法确定我真正可以信任的 SHA-256 实现。我原以为会有某种权威脚本供所有人使用,但我发现大量不同的项目都有自己的实现。

我意识到使用别人的加密货币总是一种信仰的飞跃,除非你有资格自己审查它,并且没有“值得信赖”的通用定义,但这似乎是一种常见且重要的东西,应该就使用什么达成某种共识。我只是天真吗?

编辑,因为它在评论中出现了很多:是的,我们在服务器端再次进行更严格的散列。客户端散列不是我们保存在数据库中的最终结果。客户端散列是因为人类客户端请求它。他们没有给出具体原因,可能他们只是喜欢矫枉过正。

最佳答案

关于 https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest我发现这个使用内部 js 模块的片段:

async function sha256(message) {
    // encode as UTF-8
    const msgBuffer = new TextEncoder().encode(message);                    

    // hash the message
    const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);

    // convert ArrayBuffer to Array
    const hashArray = Array.from(new Uint8Array(hashBuffer));

    // convert bytes to hex string                  
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return hashHex;
}

请注意,crypto.subtle 仅在 httpslocalhost 上可用 - 例如使用 python3 -m 进行本地开发http.server 您需要将此行添加到您的 /etc/hosts: 0.0.0.0 本地主机

重新启动 - 您可以使用有效的 crypto.subtle 打开 localhost:8000

关于hash - 是否有任何通常被认为值得信赖的 SHA-256 javascript 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338890/

相关文章:

c# - 如何使用 OneDrive SDK 按文件哈希搜索

javascript - 从另一个函数停止函数内的超时

Javascript 替换子/循环问题

node.js - 为什么当我更改该文件的数据时,该文件的哈希值保持不变?

java - 如何为 java.security.Signature 签名方法指定签名长度

java - SHA256 是否具有良好的跨平台支持?

bash - 在 macOS 中从 "shasum"获取没有文件名的 SHA256 文件哈希值

postgresql - Pentaho 中的数据哈希

javascript - 我无法将 HTML 文本框放入 Jquery

java - Scala murmur 哈希与 Java 原生哈希