2011-10-18 120 views
3

我有這種方法對紅寶石將字符串轉換爲加密的SHA代碼,我想知道是否有可能實現使用JavaScript? 事實是,我不知道到底是什麼配置這個SHA(我相信這是512,但我不知道,我想few javascript online tools但我不能達到同樣的效果)將紅寶石SHA轉換爲javascript

require 'digest' 
require 'iconv' 
word = 'testing' 
puts Digest::SHA2.new(512).hexdigest(Iconv.conv('UTF-16LE','ISO-8859-15', word)) 

#=> 6e42b2c2a6351036b78384212774135d99d849da3066264983e495b5f74dc922e3d361b8ea9c8527169757233ed0bd4e56b2c42aab0a21bbcca67219dc53b472 

也許通過了解上述方法中使用的確切配置是什麼,我可以在javascript中更容易找到它?

在此先感謝


萬一有人需要一個方法將字符串轉換爲十六進制UTF-16,在這裏它是:

function toHex(str) { 
    var group = [], i; 

    for (i = 0; i < str.length; i += 1) { 
     group.push(str.charCodeAt(i).toString(16)); 
    } 

    return group.join('00') + '00'; 
} 

回答

2

你得到不同的結果的原因是因爲Ruby代碼將'testing'轉換爲UTF-16,並且jsSHA示例正在使用ASCII。如果將「測試」擴展爲16位Unicode,則會以十六進制形式獲得"740065007300740069006e006700",這與Ruby的答案相同。當然,您也需要像您提到的那樣將其設置爲SHA-512。

+0

完美!非常感謝馬修,這是個訣竅! – zanona