1. 程式人生 > >go hex string與[]byte轉換

go hex string與[]byte轉換

hex string to []byte
import "hex"
// 省略部分程式碼....

hexStr := "fee9ecaadafeee72d2eb66a0bd344cdd"
data, err := hex.DecodeString(hexStr)
if err != nil {
// handle error
}

// continue handling data
[]byte to hex string
import (
"fmt"
"crypto/md5"
)
// 省略部分程式碼
data := "test string"
// md5.Sum() return a byte array
h := md5.Sum([]byte(data)) // with "%x" format byte array into hex string hexStr := fmt.Sprintf("%x", h)

記錄在此是因為最近在使用aes加解密的時候,有個細節沒有注意,加密返回的[]byte用fmt.Sprintf很容易格式化成了16進位制字串,但解密時傳入16進位制字串並直接轉為[]byte,總是得不到正確的結果。

經過排查才發現直接將hex string轉換為[]byte之後,已經不是加密後得到的[]byte。原因就是hex string並不是真正加密後的資料,真正加密後的資料是byte array,它被fmt格式化為hex string。所以應將hex string**當做16進位制數值**來處理,再轉到[]byte,將此處得到的[]byte解密,即可得到加密前的明文。