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解密,即可得到加密前的明文。