Golang学习笔记之MD5

1.单向加密

什么是单向加密算法。简而言之就是不可解密的加密方法,也叫作非可逆加密, 用这种方法加密过的东西,地球上现有的人类在有限的时间内是无法解密的,包括加密者自己。

2.常用的单向加密算法有哪些呢?

主要有:BASE64、MD5、SHA、HMAC,其中最为常见的就有MD5,BASE64。这里我们主要介绍最常使用的MD5算法。该算法可以用来得到一个128bit的值,既可以作为K-V中的key,也可以对密码进行加密从而确保其在传输中"不可见"。

3.Golang的加密库都放在crypto目录下,其中MD5库在crypto/md5包中,该包主要提供了New和Sum函数。

函数原型:
func Sum(data []byte) [Size]byte
返回数据data的MD5校验和。
初始化一个MD5对象.Sum 函数是对hash.Hash对象内部存储的内容进行校验和计算然后将其追加到data的后面形成一个新的byte切片。因此通常的使用方法就是将data置为nil。
该方法返回一个Size大小的byte数组,对于MD5来说就是一个128bit的16字节byte数组。

func New() hash.Hash
返回一个新的使用MD5校验的hash.Hash接口。初始化一个MD5对象.

func main() {
    h := md5.New()
    h.Write([]byte("123456")) // 需要加密的字符串为 123456
    cipherStr := h.Sum(nil)
    fmt.Println(cipherStr)
    fmt.Printf("%s\n", hex.EncodeToString(cipherStr)) // e10adc3949ba59abbe56e057f20f883e
}
Base64编码
const (
    base64Table = "123QRSTUabcdVWXYZHijKLAWDCABDstEFGuvwxyzGHIJklmnopqr234560178912"
)
var coder = base64.NewEncoding(base64Table)
func base64Encode(src []byte) []byte {
    return []byte(coder.EncodeToString(src))
}
func base64Decode(src []byte) ([]byte, error) {
    return coder.DecodeString(string(src))
}
func main() {
    // encode
    hello := "hello world"
    debyte := base64Encode([]byte(hello))
    // decode
    enbyte, err := base64Decode(debyte)
    if err != nil {
        fmt.Println(err.Error())
    }
    if hello != string(enbyte) {
        fmt.Println("hello is not equal to enbyte")
    }
    fmt.Println(string(enbyte))
}

你可能感兴趣的:(Golang学习笔记之MD5)