GO实现HMAC消息认证码
消息认证码用于对发送者进行身份认证保证数据未被篡改。
详见 http://www.okweex.com/3128.html
消息认证存在的问题
1. 无法有效的配送秘钥
2. 无法进行第三方证明
3. 无法防止发送方否认
解决办法:非对称加密数字签名!!
package main import ( "crypto/hmac" "crypto/sha256" "fmt" ) //本案例使用src为明文演示,在实际项目中应改为加密后到的密文 //生成hmac (消息认证码) func generateHMAC(src,key []byte) []byte { //创建哈希器 hasher := hmac.New(sha256.New,key) hasher.Write(src) //生成mac值 mac := hasher.Sum(nil) return mac } //认证MAC 接受到MAC1与密文 func verifyHMAC(src,mac1,key []byte) bool { //转换成hmac mac2 := generateHMAC(src,key) //对比mac1与mac2 return hmac.Equal(mac1,mac2) } func main() { src := []byte("hello world") key := []byte("123456") hmac1 := generateHMAC(src,key) fmt.Printf("HMAC1:%x\n",hmac1) check1 := verifyHMAC(src,hmac1,key) fmt.Printf("认证结果1:%v\n",check1) //篡改消息 srcerr := []byte("hello worldX") check2 := verifyHMAC(srcerr,hmac1,key) fmt.Printf("认证结果2:%v\n",check2) }