Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Keanehan GO menukar tatasusunan Btye daripada cincang MD5 kepada rentetan

Keanehan GO menukar tatasusunan Btye daripada cincang MD5 kepada rentetan

WBOY
WBOYke hadapan
2024-02-06 10:24:07687semak imbas

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

Kandungan soalan

Bolehkah seseorang memberitahu saya apa yang salah?

Saya tidak boleh menukar tatasusunan bait yang dijana oleh fungsi jumlah cincang melalui penukaran rentetan, saya perlu menggunakan sprintf.

Ini ialah coretan kod:

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

hasstringgood akan menghasilkan d41d8cd98f00b204e9800998ecf8427e hashstringjunk akan menghasilkan ��ُ�� ���b~


Jawapan betul


Apabila anda menukar data perduaan rawak kepada rentetan tanpa skema pengekodan, tidak mungkin data itu akan dipetakan kepada jujukan aksara yang boleh dicetak.

Daripada bahagian "Strings and Byte Slicing" definisi kata kerja dalam fmt 包的 %x 动词是对二进制数据进行十六进制编码的便捷方法。来自fmt dokumentasi pakej : p>

%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

Sebagai alternatif, anda boleh mengekod data menggunakan pakej bersarang di bawah pakej 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)
}

Output

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==

Pergi ke taman hiburan

Atas ialah kandungan terperinci Keanehan GO menukar tatasusunan Btye daripada cincang MD5 kepada rentetan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam