您的位置:首页 > 编程语言 > Go语言

Go计算MD5和SHA1

2017-05-23 08:30 351 查看
Go的crypto包中提供了丰富的加密工具,可以计算 MD5、SHA1、SHA256 等等,他们分别在包 crypto/md5、crypto/sha1、crypto/sha256 中。每一种算法提供的接口都大致相同,如下所示(仅列出重要部分):

// 创建一个Hash对象,用于计算相应的加密值
func New() hash.Hash

// 计算 data 的加密值,Size是一个常量,用于表示加密值的长度,MD5为16,SHA1为20
func Sum(data []byte) [Size]byte

// 在hash包中,提供了如下的Hash结构体:
type Hash interface {
// 通过内嵌 io.Writer 字段提供 io.Writer 接口
io.Writer

// 将b表示的字节切片加入当前的hash中,返回计算结果
Sum(b []byte) []byte
// ...
}

// 下面的例子中还用到了hex中的一个转换函数:
// 将src表示的16进制切片转换成字符串
func EncodeToString(src []byte) string


一个完整的例子:

package main

import (
"crypto/md5"
"crypto/sha1"
"encoding/hex"
"fmt"
"io"
"log"
"os"
)

func md5s(s string) string {
r := md5.Sum([]byte(s))
return hex.EncodeToString(r[:])
}

func md5f(fName string) string {
f, e := os.Open(fName)
if e != nil {
log.Fatal(e)
}
h := md5.New()
_, e = io.Copy(h, f)
if e != nil {
log.Fatal(e)
}
return hex.EncodeToString(h.Sum(nil))
}

func sha1s(s string) string {
r := sha1.Sum([]byte(s))
return hex.EncodeToString(r[:])
}

func sha1f(fName string) string {
f, e := os.Open(fName)
if e != nil {
log.Fatal(e)
}
h := sha1.New()
_, e = io.Copy(h, f)
if e != nil {
log.Fatal(e)
}
return hex.EncodeToString(h.Sum(nil))
}

func main() {

fmt.Println(md5s("Hello, Gopher!"))
fmt.Println(md5f("E:\\testfile"))

fmt.Println(sha1s("Hello, Gopher!"))
fmt.Println(sha1f("E:\\testfile"))
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: