最新消息:yaf表单扩展中新增加了浮点数、日期和集合的校验。php yaf框架扩展实践三——表单

golang中md5编码示例

Golang 875浏览 0评论

在golang中实现md5编码主要使用crypto md5库

计算字符串md5值

package main

import (
    "crypto/md5"
    "fmt"
    "io"
)

func main() {
    h := md5.New()
    io.WriteString(h, "The fog is getting thicker!")
    io.WriteString(h, "And Leon's getting laaarger!")
    fmt.Printf("%x\n", h.Sum(nil))
    // output: e2c569be17396eca2a2e3c11578123ed

    // 直接使用md5 ew对象的Write方式也是一样的
    h2 := md5.New()
    h2.Write([]byte("The fog is getting thicker!"))
    h2.Write([]byte("And Leon's getting laaarger!"))
    fmt.Printf("%x\n", h2.Sum(nil))
    // output: e2c569be17396eca2a2e3c11578123ed
}

运行

$ go run md5.go
e2c569be17396eca2a2e3c11578123ed
e2c569be17396eca2a2e3c11578123ed

计算文件md5值

计算文件md5值和字符串类似,只是需要打开一个文件,将file的内容io.Copy到md5.New对象。

测试文件md5test.log内容:

md5test.log
func md5File() {
    file, err := os.Open("md5test.log")
    if err != nil {
        panic(err)
    }

    h := md5.New()
    _, err = io.Copy(h, file)
    if err != nil {
        return
    }
    fmt.Printf("%x\n", h.Sum(nil))
    // output: 43c6359298645ded23f3c2ee44acf564
}

运行

$ go run md5file.go 
43c6359298645ded23f3c2ee44acf564

关于md5编码文件这边踩过一个坑:在做文件上传功能时,通过此法计算出了文件的md5值,后来也是通过io.Copy函数想写入文件,但是发现目标文件一直为空,后来才想到应当是偏移量(seek)的问题,继上面的例子:

    // 经过io.Copy操作后,file的偏移量(seek)被指向了最后面
    // 如果还需要使用则需要修改file色偏移量(seek)
    // 该行代码输出为空,因为file的seed已经位于最后了
    io.Copy(os.Stdin, file)
    // output:

    fmt.Print("\n")

    file.Seek(0, 0)

    // 该行输出文件的内容,因为file的偏移量(seek)被设置为0了
    io.Copy(os.Stdin, file)
    // output: md5test.log

    fmt.Print("\n")

运行

$ go run md5file.go 
43c6359298645ded23f3c2ee44acf564

md5test.log

转载请注明:快乐编程 » golang中md5编码示例

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址