2014-09-10 41 views
0

請問您能否提供一種獲取javascript的方法,與perl的md5_base64函數具有相同的結果?我目前的js環境有md5base64encode函數,但我不確定如何正確使用它們。在javascript中模擬perl的md5_base64函數

我試圖寫這樣的事情,但結果從Perl的不同:

function hex2str(str) { 
    var res = ''; 
    for (var i = 0; i < str.length; i += 2) { 
     res += String.fromCharCode(parseInt(str.substr(i, 2), 16)); 
    } 
    return res; 
} 

var md5res = md5('test'); // '098f6bcd4621d373cade4e832627b4f6' 

var token = base64encode(hex2str(md5('test'))); // got 'CcKPa8ONRiHDk3PDisOeTsKDJifCtMO2' 

在Perl:中md5()base64encode()

#!/usr/bin/perl 

use Digest::MD5 qw{md5_base64}; 

print md5_base64("test"); // 'CY9rzUYh03PK3k6DJie09g' 
+0

請從你的JS代碼中顯示'md5('test')'的輸出。你的'hex2str'函數顯示OK - 爲了得到正確的輸出,MD5應該是'098f6bcd4621d373cade4e832627b4f6',我已經確認'window.btoa(hex2str('098f6bcd4621d373cade4e832627b4f6))'產生與你的Perl代碼相同的輸出。 – Alnitak 2014-09-10 10:49:37

+0

是的,md5輸出是'098f6bcd4621d373cade4e832627b4f6',添加到代碼中。看起來像'base64encode'返回錯誤的結果。 – accme 2014-09-10 10:59:07

+0

由於UTF-16編碼,你的'hex2str'函數是錯誤的。 – 2014-09-10 12:10:32

回答

0

檢查輸出分開。

前者的輸出應爲098f6bcd4621d373cade4e832627b4f6。 如果您正在瀏覽器中運行,您還應該能夠使用window.btoa()作爲Base64編碼器功能。

我已經分別證實window.btoa(hex2str('098f6bcd4621d373cade4e832627b4f6'))產生相同的輸出作爲Perl代碼(不同之處在於window.btoa包括在端一些==填充,以使輸出4個字節長的倍數,每對的Base64規範)。