首頁  >  文章  >  後端開發  >  GO 怪異將 Btye 陣列從 MD5 雜湊值轉換為字串

GO 怪異將 Btye 陣列從 MD5 雜湊值轉換為字串

WBOY
WBOY轉載
2024-02-06 10:24:07687瀏覽

GO 怪异将 Btye 数组从 MD5 哈希值转换为字符串

問題內容

有人可以告訴我哪裡出了問題嗎?

我無法透過字串轉換來轉換由雜湊求和函數產生的位元組數組,我必須使用 sprintf。

這是程式碼片段:

f, _ := os.Open(filename)
hash := md5.New()
io.Copy(hash, f)
hashStringGood := fmt.Sprintf("%x", hash.Sum(nil))
hashStringJunk := string(hash.Sum(nil)[:])

hasstringgood 將導致 d41d8cd98f00b204e9800998ecf8427e hashstringjunk 將導致��ُ�� ���b~


#正確答案


##當您將隨機二進位資料轉換為沒有編碼方案的字串時,資料不太可能對應到可列印字元序列。

來自

fmt 套件的 %x 動詞是對二進位資料進行十六進位編碼的便捷方法。來自fmt 套件文件中動詞定義的「字串和位元組切片」部分:

%s  the uninterpreted bytes of the string or slice
%q  a double-quoted string safely escaped with go syntax
%x  base 16, lower-case, two characters per byte
p>或者,您可以使用嵌套在

encoding 套件下的套件對資料進行編碼:

package main

import (
    "crypto/md5"
    "encoding/base64"
    "encoding/hex"
    "fmt"
)

func main() {
    hash := md5.sum([]byte("input to be hashed"))
    fmt.printf("using %%s verb: %s\n", hash)
    fmt.printf("using %%q verb: %q\n", hash)
    fmt.printf("using %%x verb: %x\n", hash)

    hexhash := hex.encodetostring(hash[:])
    fmt.printf("converted to a hex-encoded string: %s\n", hexhash)

    base64hash := base64.stdencoding.encodetostring(hash[:])
    fmt.printf("converted to a base64-encoded string: %s\n", base64hash)
}

輸出

Using %s verb: �����Q���6���5�
Using %q verb: "\x8d\xa8\xf1\xf8\x06\xd3Q\x9d\xa1\xe46\xdb\xfb\x9f5\xd7"
Using %x verb: 8da8f1f806d3519da1e436dbfb9f35d7
Converted to a hex-encoded string: 8da8f1f806d3519da1e436dbfb9f35d7
Converted to a base64-encoded string: jajx+AbTUZ2h5Dbb+5811w==

去遊樂場#

以上是GO 怪異將 Btye 陣列從 MD5 雜湊值轉換為字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除