2 回答

TA貢獻2041條經(jīng)驗 獲得超4個贊
在對 node 和 V8 進行大量挖掘之后,我得出了以下結(jié)論:
require("crypto").createHash("md5").update(inputString).digest("hex");
非常危險,因為未指定將輸入字符串編碼為“ASCII”。經(jīng)過大量挖掘后,其中是等效的(在我最后的大型輸入集上進行了驗證):
// toNodeASCIIString converts a string to a byte of node compatible ASCII string
func toNodeASCIIString(inputString string) []byte {
lengthOfString := utf8.RuneCountInString(string(inputString))
stringAsRunes := []rune(inputString)
bytes := make([]byte, lengthOfString)
for i, r := range stringAsRunes {
bytes[i] = byte(r % 256)
}
return bytes
}
基本上做的是 256 的 mods 并忘記輸入字符串的很大一部分。
上面的節(jié)點示例幾乎是在 node.js 中創(chuàng)建 MD5 哈希的標(biāo)準(zhǔn)和復(fù)制粘貼方式。我還沒有檢查過,但我假設(shè)這對所有其他哈希(SHA1、SHA256 等)都是一樣的。
我很想聽聽有人對為什么這不是巨大的安全漏洞的想法。

TA貢獻1860條經(jīng)驗 獲得超8個贊
正如您已經(jīng)注意到的:您必須將 UTF8 字符串轉(zhuǎn)換為節(jié)點應(yīng)用程序中使用的任何編碼。這可以通過編碼包來完成,例如:
golang.org/x/text/encoding/charmap
isoString, err := charmap.ISO8859_1.NewEncoder().Bytes([]byte(stringToEncode))
考慮到’
iso-8859-1 中不允許使用該字符,我們可以假設(shè)您有不同的編碼?,F(xiàn)在你只需要弄清楚是哪一個!
在更糟糕的情況下,您可能必須使用其他包而不是charmap
.
- 2 回答
- 0 關(guān)注
- 186 瀏覽
添加回答
舉報