MD5
-
md5介绍
md5的全称为md5信息摘要算法(MD5 Message-Digest Algorithm),是一种被广泛应用的密码散列函数,产生一个128位(16字节)的散列值,最常见的是32位的16进制表示,如:0caa3b23b8da53f9e4e041d95dc8fa2c,用以确保信息传输的完整一致。md5将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的md5信息摘要,文件的md5类似于人的指纹,是世界上独一无二的,如果任何人对文件做了改动,其md5值也会发生变化。
md5与对称和非对称的加密算法不同,这两种密码是防止信息被窃取,而md5的目的是验证原文的完整性。
-
md5的特性
-
不可逆
没有系统有办法知道md5原来的文字是什么
-
具有高度的离散性
md5码具有高度的散列性,没有规律可循,哪怕原信息只有一点点的变化,比如多个空格,那么就会导致md5发生巨大变化,也可以说产生的md5码是不可预测的
-
压缩性
任意长度的数据,算出的md5值得长度都是固定的。
-
弱碰撞性
已知原数据和其md5的值,想找到一个具有相同md5值得数据(即伪造数据)是非常困难的。
-
-
md5的用途
-
密码的加密存储
用户设置密码时,服务端只记录这个密码的MD5,而不记录密码本身,以后验证用户身份时,只需要将用户输入的密码再次做一下MD5后,与记录的MD5作一个比较即可验证其密码的合法性。
-
数字签名
比如发布一个程序,为了防止别人在你的程序里插入病毒或木马,你可以在发布这个程序的同时,公开这个程序文件的MD5码,这样别人只需要在任何地方下载这个程序后做一次MD5,然后跟公开的这个MD5作一个比较就知道这个程序是否被第三方修改过。
-
文件完整性验证
比如当下载一个文件时,服务器返回的信息中包括这个文件的md5,在本地下载完毕时进行md5,将两个md5值进行比较,如果一致则说明文件完整没有丢包现象
-
文件上传
比如百度云实现的秒传,就是对比你上传的文件md5在百度服务器是否已经存在了。
-
-
注意事项
SHA256
SHA256 是安全散列算法 SHA(Secure Hash Algorithm)系列算法之一,其摘要长度为256 bits,即32个字节,故称SHA256。SHA系列算法是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。
-
字符串的哈希值
计算字符串的哈希值,一共分为3步:
- sha256.New 2. Write中写入需要hash的内容 3. h.Sum生成hash值
func hashSHA256String(input string) []byte{
h := sha256.New()
h.Write([]byte(input))
return h.Sum(nil)
}
- 文件哈希值
func hashSHA256File(filePath string)(string, error) {
var hashValue string
file, err := os.Open(filePath)
if err != nil {
fmt.Printf("openfile error!")
return hashValue, err
}
defer file.Close()
hash := sha256.New()
if _, err := io.Copy(hash, file); err != nil {
return hashValue, err
}
hashInBytes := hash.Sum(nil)
hashValue = hex.EncodeToString(hashInBytes)
return hashValue, nil
}
本文深入探讨了MD5和SHA256两种密码散列函数,详细介绍了它们的工作原理、特性及应用场景,如密码加密存储、数字签名、文件完整性验证等,强调了在信息安全领域的关键作用。
2084

被折叠的 条评论
为什么被折叠?



