vlambda博客
学习文章列表

[Go菜牛系列]Hash算法的使用:MD5/Sha1

在进行Web应用开发过程中,我们经常需要对数据进行加密或校对。

比如在client请求server接口时,需要传递签名参数(比如sign/token)给server,让server校验此次请求的合法性;又比如client往server端传输文件时,需要将文件的hash值传递给server, server在计算一遍接收到的文件内容的hash值后,和client上传的hash值作比对,一致的话才认为这次文件上传是完整的。

这些情况下,我们一般会用到CRC32/MD5/Sha1等等这些加密算法,其中这些算法有一个共同点, 就是都是非对称加密,也就是理论上是不可逆的。

以下是Go实现的MD5/Sha1的计算方法,可使用于文件或数据流的hash计算。


package util
import (  "io" "os" "crypto/md5" "crypto/sha1" "encoding/hex"
// Sha1 : 计算[]byte类型数据的sha1值func Sha1(data []byte) string { _sha1 := sha1.New() _sha1.Write(data) return hex.EncodeToString(_sha1.Sum([]byte("")))}
// FileSha1 : 计算文件的sha1值func FileSha1(file *os.File) string { _sha1 := sha1.New() io.Copy(_sha1, file) // reset cursor file.Seek(0, 0) return hex.EncodeToString(_sha1.Sum(nil))}
// MD5 : 计算[]byte类型数据的MD5值func MD5(data []byte) string { _md5 := md5.New() _md5.Write(data) return hex.EncodeToString(_md5.Sum([]byte("")))}
// MD5 : 计算文件的MD5值func FileMD5(file *os.File) string { _md5 := md5.New() io.Copy(_md5, file) // reset cursor file.Seek(0, 0) return hex.EncodeToString(_md5.Sum(nil))}