2011-10-31 90 views
2

cryto.createHash SHA512我試圖得到相同的結果,我在http://jssha.sourceforge.net/與hexDigest輸入型

獲得其中

我有字有問題「測試」:對

var word = 'testing'; 
var hex = toHex(word); // '740065007300740069006e006700'; 

jssha當選擇input type作爲十六進制的值爲hex變量和SHA-512時,我得到以下結果:

6e42b2c2a6351036b78384212774135d99d849da3066264983e495b5f74dc922e3d361b8ea9c8527169757233ed0bd4e56b2c42aab0a21bbcca67219dc53b472 

雖然我無法與nodejs crypto module達到相同的結果。

require('crypto').createHash('sha512').update(hex).digest('hex') 

輸出:

9ad6d9053c6c420fe61ec2fffd094e3a325bc71708e18232fd764a5eb30315e38464e620ef0b55b92fbf6c809838652a72d9412b0398b28d61ca432962451de2 

所以我想知道我怎麼能得到相同的結果jssha使用密碼模塊?在十六進制

感謝

回答

4

「測試」是74657374696e67如果你使用UTF-8,這是相當多的標準。你的toHex方法返回的是UTF16。

對於散列,該網站說:

521b9ccefbcd14d179e7a1bb877752870a6d620938b28a66a107eac6e6805b9d0989f45b5730508041aa5e710847d439ea74cd312c9355f1f2dae08d40e41d50 

爲此在node.js的哈希十六進制字符串:

require('crypto').createHash('sha512').update(
    new Buffer("74657374696e67", "hex") 
).digest('hex') 

節點爲您提供了相同的哈希值。哦,這也給你相同的哈希:

require('crypto').createHash('sha512').update("testing").digest('hex') 
+0

感謝@thejh,似乎'新的緩衝區(「74657374696e67」,「六角」)'方法返回'未知encoding'我。另外,有沒有什麼辦法可以使用utf-16來代替8.對不起,我猜這是因爲它來自外部Web服務。 – zanona

+0

@ludicco:當然,你可以用utf16十六進制字符串來做同樣的事情。 「未知編碼」是因爲您使用的是舊版本的節點,使用0.5.10並在可用時更改爲0.6.0。 – thejh

+0

再次感謝@thejh,唯一的問題是這個實例在heroku上運行,恐怕他們現在只支持0.47?在這種情況下,我不確定您提到的方法是否可以工作?如果你對我如何完成這項工作有任何想法,那將非常感激;) – zanona