javascript - nodejs - npm crypto




如何獲得node.js中字符串的sha1散列? (3)

提示以防止問題(壞散列):

我經歷過NodeJS散列字符串的UTF-8表示。 其他語言(如Python,PHP或PERL ...)對字節字符串進行散列。

我們可以添加二進制參數來使用字節字符串。

const crypto = require("crypto");

function sha1(data) {
    return crypto.createHash("sha1").update(data, "binary").digest("hex");
}

sha1("Your text ;)");

您可以嘗試使用:“\ xac”,“\ xd1”,“\ xb9”,“\ xe2”,“\ xbb”,“\ x93”等等。

其他語言(Python,PHP,...):

sha1("\xac") //39527c59247a39d18ad48b9947ea738396a3bc47

的NodeJS:

sha1 = crypto.createHash("sha1").update("\xac", "binary").digest("hex") //39527c59247a39d18ad48b9947ea738396a3bc47
//without:
sha1 = crypto.createHash("sha1").update("\xac").digest("hex") //f50eb35d94f1d75480496e54f4b4a472a9148752

我正在嘗試創建一個用node.js編寫的websocket服務器

為了讓服務器正常工作,我需要獲取字符串的SHA1哈希值。

我必須做的是在文檔的第5.2.2頁中解釋。

注意:例如,如果客戶端握手中"Sec-WebSocket-Key"標頭的值為"dGhlIHNhbXBsZSBub25jZQ==" ,則服務器將追加字符串"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"以形成字符串"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" 。 然後服務器將採用此字符串的SHA-1散列,給出值0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea。 然後該值以base64編碼,以提供值"s3pPLMBiTxaQ9kYGzzhZRbK+xOo=" ,該值將在"Sec-WebSocket-Accept"標題中返回。


強制性:SHA1已損壞 ,您可以與平均啟動加速器隊列的AWS信用相衝突,但要回答您的問題:

var getSHA1ofJSON = function(input){
    return crypto.createHash('sha1').update(JSON.stringify(input)).digest('hex')
}

然後:

getSHA1ofJSON('whatever')

要么

getSHA1ofJSON(['whatever'])

要么

getSHA1ofJSON({'this':'too'})

請在您的帖子的評論中閱讀並強烈考慮我的建議。 這就是說,如果你仍然有充足的理由這樣做,請查看節點的crpyto模塊列表 。 它有用於處理sha1和base64的模塊。





websocket