GO-Verrücktheit beim Konvertieren des Btye-Arrays vom MD5-Hash in einen String

WBOY
Freigeben: 2024-02-06 10:24:07
nach vorne
671 Leute haben es durchsucht

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

Frageninhalt

Kann mir jemand sagen, was los ist?

Ich kann das von der Hash-Summenfunktion generierte Byte-Array nicht per String-Konvertierung konvertieren, ich muss sprintf verwenden.

Dies ist der Codeausschnitt:

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

hasstringgood führt zu d41d8cd98f00b204e9800998ecf8427e Hashstringjunk führt zu ��ُ�� ���b~


Richtige Antwort


Wenn Sie zufällige Binärdaten in eine Zeichenfolge ohne Codierungsschema konvertieren, ist es unwahrscheinlich, dass die Daten einer Folge druckbarer Zeichen zugeordnet werden.

Aus dem Abschnitt „Strings und Byte-Slicing“ der Verbdefinition in der fmt 包的 %x 动词是对二进制数据进行十六进制编码的便捷方法。来自fmt Paketdokumentation :

%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
Nach dem Login kopieren

Alternativ können Sie die Daten mit einem Paket verschlüsseln, das unter dem encoding-Paket verschachtelt ist:

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)
}
Nach dem Login kopieren

Ausgabe

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==
Nach dem Login kopieren

Gehen Sie in den Vergnügungspark

Das obige ist der detaillierte Inhalt vonGO-Verrücktheit beim Konvertieren des Btye-Arrays vom MD5-Hash in einen String. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!