NodeJS“加密”哈希似乎产生与 Crypto-JS javascript 库不同的输出

2024-05-26

我正在使用 NodeJS 的捆绑包crypto http://nodejs.org/api/crypto.html#crypto_class_hash服务器端 SHA256 哈希模块。 在客户端,我使用一个名为的 javascript 库Crypto-JS http://code.google.com/p/crypto-js/#SHA-2.

我使用 SHA256 哈希值作为登录系统,该系统使用经典的基于随机数的身份验证。但是,即使哈希消息相同(我已经检查过),我的服务器端和客户端哈希摘要也不匹配。甚至哈希摘要的长度也不同。

这是我的客户端实现的片段:

var password_hash = CryptoJS.SHA256( token.nonce /*this is the server's nonce*/ + cnonce + password ).toString(CryptoJS.enc.Base64);

这是我的服务器端实现的片段:

var sha256 = CRYPTO.createHash("sha256");
sha256.update(snonce+cnonce+password, "utf-8");
var hash = sha256.digest("base64");

这是一些示例数据:

client-digest: d30ab96e65d09543d7b97d7cad6b6cf65f852f5dd62c256595a7540c3597eec4
server-digest: vZaCi0mCDufqFUwVO40CtKIW7GS4h+XUhTUWxVhu0HQ=

client-message: O1xxQAi2Y7RVHCgXoX8+AmWlftjSfsrA/yFxMaGCi38ZPWbUZBhkVDc5eadCHszzbcOdgdEZ6be+AZBsWst+Zw==b3f23812448e7e8876e35a291d633861713321fe15b18c71f0d54abb899005c9princeofnigeria
server-message: O1xxQAi2Y7RVHCgXoX8+AmWlftjSfsrA/yFxMaGCi38ZPWbUZBhkVDc5eadCHszzbcOdgdEZ6be+AZBsWst+Zw==b3f23812448e7e8876e35a291d633861713321fe15b18c71f0d54abb899005c9princeofnigeria 

有谁知道为什么哈希值不同?我认为如果是相同的协议/算法,它总是会产生相同的哈希值。

编辑:哇。我去了这个在线哈希工具 http://www.xorbin.com/tools/sha256-hash-calculator它为同一消息生成另一个摘要:

4509a6d5028b217585adf41e7d49f0e7c1629c59c29ce98ef7fbb96c6f27502c

编辑编辑:再想一想,在线哈希工具不同的原因可能是因为它使用hex编码和我使用base64


问题确实出在编码上。

看一下客户端的实现:

var password_hash = CryptoJS.SHA256(message).toString(CryptoJS.enc.Base64);

The CryptoJS.enc.Base64参数实际上需要 CryptoJS 库中的另一个组件,但我没有包含该组件(存储在 js 文件中:enc-base64-min.js)。因此,在没有有效的编码类型的情况下,它默认为hex.

感谢@dhj 指出编码问题!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NodeJS“加密”哈希似乎产生与 Crypto-JS javascript 库不同的输出 的相关文章

随机推荐