Keanehan GO menukar tatasusunan Btye daripada cincang MD5 kepada rentetan

WBOY
Lepaskan: 2024-02-06 10:24:07
ke hadapan
671 orang telah melayarinya

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)[:])
Salin selepas log masuk

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 :

%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
Salin selepas log masuk

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)
}
Salin selepas log masuk

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==
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!