第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以節(jié)點兼容的方式編碼 md5

以節(jié)點兼容的方式編碼 md5

Go
慕無忌1623718 2021-12-13 11:03:36
我正在轉(zhuǎn)換節(jié)點服務(wù)。為此,我需要一個兼容的 md5 哈希(不是用于存儲密碼?。。┥善?。然而,在這個例子中,我不斷得到不同的結(jié)果:節(jié)點crypto在創(chuàng)建md5s時采用編碼參數(shù)。> crypto.createHash("md5").update("1Editor’s notebook: Escaping temptation for turf145468066").digest("hex")'c7c3210bd977b049f42c487b8c6d0463'在 golang 中:(test_encode.go)package mainimport (    "crypto/md5"    "encoding/hex"    "testing")func TestFoo(t *testing.T) {    const result = "c7c3210bd977b049f42c487b8c6d0463"    stringToEncode := "1Editor’s notebook: Escaping temptation for turf145468066"    hash := md5.Sum([]byte(stringToEncode))    hashStr := hex.EncodeToString(hash[:])    if hashStr != result {        t.Error("Got", hashStr, "expected", result)    }}然后go test test_encode.go結(jié)果是:--- FAIL: TestFoo (0.00s)encode_test.go:17: Got c3804ddcc59fabc09f0ce2418b3a8335 expected c7c3210bd977b049f42c487b8c6d0463FAILFAIL    command-line-arguments  0.006s我已經(jīng)將其追蹤到節(jié)點代碼中的encoding參數(shù)crypto.update。而事實上,字符串作為’引號字符在里面。如果我指定"utf8"它有效。crypto.createHash("md5").update("1Editor’s notebook: Escaping temptation for turf145468066", "utf8").digest("hex")但是:我無法更改節(jié)點代碼,因此 go 代碼必須兼容。關(guān)于該怎么做的任何想法?
查看完整描述

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 等)都是一樣的。


我很想聽聽有人對為什么這不是巨大的安全漏洞的想法。


查看完整回答
反對 回復(fù) 2021-12-13
?
桃花長相依

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.


查看完整回答
反對 回復(fù) 2021-12-13
  • 2 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號