我使用的NodeJS的捆綁在一起,SHA256散列在服務器端crypto
模塊加密JS不同的輸出。 在客戶端,我使用了一個名爲Crypto-JS
的JavaScript庫。的NodeJS「加密」哈希似乎產生比JavaScript庫
我使用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
有誰知道哈希爲什麼不同?我認爲如果它是相同的協議/算法,它將始終產生相同的散列。
編輯:哇。我去的這online hashing tool和它相同的消息產生又一摘要:
4509a6d5028b217585adf41e7d49f0e7c1629c59c29ce98ef7fbb96c6f27502c
編輯編輯:關於第二個想法,在網上散列工具是不同的,可能是因爲它採用了hex
編碼和我用base64
我得到了與在線哈希工具相同的一個。你確定你沒有改變客戶端和服務器之間的字符串編碼嗎?也許序列化協議或從ASCII到UTF或更改?只是有點不同會給出完全不同的散列。 – dhj
@dhj我不認爲編碼改變了任何東西。我將所有的隨機數轉換爲base64,所以一切都是字符串。我還控制檯在瀏覽器和服務器上記錄了散列消息,並將它們進行比較(問題中的散列消息是從控制檯輸出粘貼的副本)。 – Joshua
那麼服務器和客戶端摘要肯定是兩種不同的結果編碼。客戶端在十六進制服務器可能base64。 SHA256將始終返回一個256位摘要。 – dhj