Go 语言学习笔记:计算字符串哈希值

技术Golang

需求

昨天使用 Go 完成了一个小小的爬虫和展示的 web 项目,抓取了5000首古诗文,并能够呈现在自己的网站上。为了避免古诗文的重复,我将古诗文内容进行了 md5 哈希,并作为唯一索引。Go 语言中的哈希并不像 PHP 中那样简单,但是经过实践,也能够快速的理解并使用 Go 语言中的哈希算法。

使用

Golang的加密库都放在crypto目录下,其中MD5库在crypto/md5包中,该包主要提供了New、Write和Sum方法。

type digest struct {
    s   [4]uint32
    x   [chunk]byte
    nx  int
    len uint64
}

因此,加密流程如下所示:

c2 := md5.New()
c2.Write([]byte(`hello world`))
c2.Sum([]byte(nil)))

其实有一种更简便的方法,在 md5.go 中,提供了一个 Sum 函数 直接串行了上述方法,因此,上述代码可合并为:

md5.Sum([]byte(`hello world`))

上述程序的放回结果为128bit (也就是32位)的16进制数组,如果需要将其转化为 string 类型,需要使用hex.EncodeToString 函数,并需要将数组转化为 slice, 例如:

c1 := md5.Sum([]byte(`hello world`))
fmt.Println(hex.EncodeToString(c1[:]))
//返回“5eb63bbbe01eeed093cb22bb8f5acdc3”

延伸

sha256 方法和 md5 方法的使用方法完全相同,可尝试使用。

c2 := sha256.Sum256([]byte("hello world"))
fmt.Println(hex.EncodeToString(c2[:]))
创建于2017年05月25日 19:22
阅读量 5697
留言列表

暂时没有留言

添加留言