Go计算MD5和SHA1

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"))
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值