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))
}
有疑问加站长微信联系(非本文作者)