前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、MD5是什么?
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
二、go语言实现
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
)
func main() {
hash := md5.New()
hash.Write([]byte("hello baby"))
//io.WriteString(hash, "hello baby!")
result := hash.Sum (nil)
fmt.Println(hex.EncodeToString(result))
hash.Reset()
hash.Write([]byte("hello baby123"))
result = hash.Sum(nil)
fmt.Println(hex.EncodeToString(result))
//fmt.Printf("%x\n", result)
}
//4be678c3cfbd2cebe0e36503d53e6767
//4be678c3cfbd2cebe0e36503d53e6767
//292bf3c832cce2ab5d4f9775596b13bd
//3132334be678c3cfbd2cebe0e36503d53e6767
func main6_2() {
result := md5.Sum([]byte("hello baby"))
fmt.Println(hex.EncodeToString(result[:]))
}
/*
两种方式的优缺点:
优点 缺点
方式一 可以对哈希对象多次复用 代码繁琐
方式二 代码简洁 对象不能复用
*/