2016-07-29 117 views
2

我遇到以下問題:我嘗試將一些字符串str轉換爲md5 bytestring hash。在PHP中,我們可以使用md5(str, true),但在JS(nodejs express)中,我無法找到某種方式來接收相同的結果。我已經包含npm模塊js-md5,但arrayBuffer該模塊的方法返回另一個結果(不同於PHP md5(str,true))。NodeJS md5'bytestring'like PHP md5(str,true)

請問有人能幫助我。

感謝

回答

0

使用CryptoJS模塊: NPM link here

而且做這樣的事情:

// Requires 
var crypto = require('crypto'); 

// Constructor 
function Crypto() { 
    this.hash; 
} 

// Hash method 
Crypto.prototype.encode = function(data) { 
    this.hash = crypto.createHash('md5').update(data); 
    var result = this.hash.digest('hex'); 
    return result; 
}; 

// Comparison method (return true if === else false) 
Crypto.prototype.equals = function(data, model) { 
    var bool = false; 
    var data = data.toUpperCase(); 
    var model = String(model).toUpperCase(); 
    if (data == model){ 
     bool = true; 
    } else { 
     bool = false; 
    } 
    return bool; 
}; 

// Exports 
module.exports = Crypto; 

然後在你的代碼和使用方法,實例化這個 「工具」 對象。
簡單易用,同樣的事情可以用AES,SHA256等其他加密方法完成。
關於raw_output選項(二進制答案,填充16位),您可以輕鬆地將返回的二進制格式的變量與一個簡單的功能,見this SO post知道如何。 玩得開心。

0

簡短的回答:

const crypto = require('crypto'); 
const buffer = crypto.createHash('md5').update(str).digest(); 

龍答:你需要使用的NodeJS的默認crypto模塊(不需要這裏的依賴),其中包含效用函數和類。它能夠使用同步或異步方法爲您創建散列(例如MD5或SHA-1散列)。一個名爲crypto.createHash(algorithm)的簡短實用程序函數可用於創建具有最少編碼的散列。 As the docs specified:

algorithm取決於平臺上OpenSSL版本支持的可用算法。示例是'sha256','sha512'等。在最近發佈的OpenSSL中,openssl list-message-digest-algorithms將顯示可用的摘要算法。現在

,這createHash函數返回一個Hash對象,其可與一個流中使用(可以餵它一個文件,HTTP請求等)或字符串,因爲你問。如果您想使用字符串,請使用hash.update(string)對其進行散列。此方法返回散列本身,因此您可以將其與.digest(encoding)鏈接以生成字符串(如果設置了encoding)或Buffer(如果不是)。既然你問了字節,我相信Buffer是你想要的(Buffer s是Uint8Array實例)。

+0

你是對的,我寫這個很匆忙,忘記了。請讓我編輯我的答案。 – Iso

+0

現在你的答案比舊的好多了,我刪除了我以前的評論。謝謝 ;)。 附加信息:不要嘗試消化散列兩次,否則會出現錯誤。散列只能被摘要一次。例如,如果比較兩個密碼,請注意對象的類型(如果它來自輸入,可能是字符串,但如果它來自像數據庫結果集這樣的對象,則爲對象屬性),這就是爲什麼我創建了「equals 「方法(受Java中的.equals()啓發)。 – Aethyn