解码base64并将其编码为十六进制

时间:2019-07-08 16:21:53

标签: go base64 hex

我有以下代码,该代码可以解码base64,然后将其编码为十六进制。

doc_id := "Can35qPeFkm9Xgmp9+aj3g=="
base64_decode, err := base64.StdEncoding.DecodeString(doc_id)
if err != nil {
log.Fatal("error:", err)
}
base64_decoded := fmt.Sprintf("%q", base64_decode)
fmt.Printf("base_decoded %v\n", base64_decoded)



src := []byte(base64_decoded)
fmt.Println(src)
hex_encode := make([]byte, hex.EncodedLen(len(src)))
hex.Encode(hex_encode, src)
hex_encoded := fmt.Sprintf("%s", hex_encode)
fmt.Printf("hex_encoded %v", hex_encoded)

其中doc_id是base64格式。 base64_decoded是其解码值。 我必须将其编码为十六进制,所以我将其传递给src。

问题是当我将base64_decoded的标识符传递给src时,我传递了base64_decoded所持有的值时,我得到了错误答案。 例如: 如果我将base64_decoded值设为“ \ x11z \ xc0 [d〜\ xfcK \ xb1 \ xf8 \ x11z \ xc0 [d〜”” 如果我传递的值是“ \ x11z \ xc0 [d〜\ xfcK \ xb1 \ xf8 \ x11z \ xc0 [d〜””,我会得到正确的答案117ac05b647efc4bb1f8117ac05b647e

如果我传递的变量持有“ \ x11z \ xc0 [d〜\ xfcK \ xb1 \ xf8 \ x11z \ xc0 [d〜””,我的答案会出错225c7831317a5c7863305b647e5c7866634b5c7862315c7866385c7831317a5c7863305b647e22dn

此分配是否有帮助 base64_decoded:= fmt.Sprintf(“%q”,base64_decode)

我在做什么错

2 个答案:

答案 0 :(得分:1)

使用以下代码:

base64_decode

fmt.Sprintf("%q", base64_decode)中的字节直接编码为十六进制。

base64_decode的调用将返回一个字符串,其中包含按照Go的字符串文字规则转义的字节。通常,返回的字符串中的字节与\x11中的字节不相等。例如,输入字节0x11被转义为四个字节gen_key = lambda x : (x.rsplit('.', 1)[0], x) Ip_1 = Ip_1.map(gen_key) Ip_2 = Ip_2.map(gen_key) common_ip = Ip_1.join(Ip_2)

答案 1 :(得分:0)

发生的情况是fmt.Sprintf(“%q”,base64_decode)进行的对base64_decode的转换,在此过程中丢失了转换内存中某些字节的操作。

在下面为您提供示例:https://play.golang.org/p/pdQBp7NsvQM

doc_id := "Can35qPeFkm9Xgmp9+aj3g=="
var_encode := b64.StdEncoding.EncodeToString([]byte(doc_id))
fmt.Println(var_encode)
var_decode , _ := b64.StdEncoding.DecodeString(var_encode)
fmt.Println(string(var_decode))