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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值