Go 语言常用加密解密算法实现与总结
前言
加密解密在实际开发中应用广泛,常见的加解密分为三种:对称式、非对称式和数字签名。
- 对称式:对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。具体算法主要有 DES 算法、3DES 算法、TDEA 算法、Blowfish 算法、RC5 算法、IDEA 算法等。
- 非对称加密:指加密和解密使用不同密钥的加密算法,也称为公私钥加密。具体算法主要有 RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
- 数字签名:数字签名是非对称密钥加密技术与数字摘要技术的应用。主要算法有 MD5、HMAC、SHA1 等。
以下详细介绍 Golang 语言中主要的加密解密算法实现。
MD5
MD5 信息摘要算法是一种被广泛使用的密码散列函数,可以产生出一个 128 位(16 进制,32 个字符)的散列值(hash value),用于确保信息传输完整一致。需要注意的是,MD5 已不再推荐用于安全性要求高的场景,因为存在碰撞风险。
package main
import (
"crypto/md5"
"encoding/hex"
)
func GetMd5String(s string) string {
h := md5.New()
h.Write([]byte(s))
return hex.EncodeToString(h.Sum(nil))
}
HMAC
HMAC 是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写。它通过一个标准算法,在计算哈希的过程中,把 key 混入计算过程中。和我们自定义的加 salt 算法不同,Hmac 算法针对所有哈希算法都通用,无论是 MD5 还是 SHA-1。采用 Hmac 替代我们自己的 salt 算法,可以使程序算法更标准化,也更安全。
MD5 + HMAC
func Hmac(key, data string) string {
hash := hmac.New(md5.New, []byte(key)) // 创建对应的 md5 哈希加密算法
hash.Write([]byte(data))
return hex.EncodeToString(hash.Sum(nil))
}
SHA256 + HMAC
func HmacSha256(key, data string) {
hash := hmac.New(sha256.New, [](key))
hash.Write([](data))
hex.EncodeToString(hash.Sum())
}

