我遇到以下問題:我嘗試將一些字符串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)
請問有人能幫助我。
感謝
我遇到以下問題:我嘗試將一些字符串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)
請問有人能幫助我。
感謝
使用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知道如何。 玩得開心。
簡短的回答:
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
實例)。
你是對的,我寫這個很匆忙,忘記了。請讓我編輯我的答案。 – Iso
現在你的答案比舊的好多了,我刪除了我以前的評論。謝謝 ;)。 附加信息:不要嘗試消化散列兩次,否則會出現錯誤。散列只能被摘要一次。例如,如果比較兩個密碼,請注意對象的類型(如果它來自輸入,可能是字符串,但如果它來自像數據庫結果集這樣的對象,則爲對象屬性),這就是爲什麼我創建了「equals 「方法(受Java中的.equals()啓發)。 – Aethyn