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

Posted 编程入门Go

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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))}

以上是关于[Go菜牛系列]Hash算法的使用:MD5/Sha1的主要内容,如果未能解决你的问题,请参考以下文章

Hash算法效率简单对比(md5,sha1,sha256)

常见用户密码加密方式之特殊的单向HASH算法

python加密---hashlib模块

加密算法笔记

什么?区块链中的hash算法!施主,快扶老衲起来

hashlib 模块用来进行hash