需求
昨天使用 Go 完成了一个小小的爬虫和展示的 web 项目,抓取了5000首古诗文,并能够呈现在自己的网站上。为了避免古诗文的重复,我将古诗文内容进行了 md5 哈希,并作为唯一索引。Go 语言中的哈希并不像 PHP 中那样简单,但是经过实践,也能够快速的理解并使用 Go 语言中的哈希算法。
使用
Golang的加密库都放在crypto目录下,其中MD5库在crypto/md5包中,该包主要提供了New、Write和Sum方法。
- New 方法用于生成 digest 结构;
- Write 方法 用于向 digest 结构中写入需要进行哈希的字符串([]byte类型);
- Sum 方法接收一个参数,将字符串进行哈希并将哈希值拼接在参数后,其内部实现是先使用 checkSum 方法(不对外暴露)进行哈希并将结果拼接在参数后。
1 | type digest struct { |
因此,加密流程如下所示:
1 | c2 := md5.New() |
其实有一种更简便的方法,在 md5.go 中,提供了一个 Sum 函数 直接串行了上述方法,因此,上述代码可合并为:
1 | md5.Sum([]byte(`hello world`)) |
上述程序的放回结果为128bit (也就是32位)的16进制数组,如果需要将其转化为 string 类型,需要使用hex.EncodeToString
函数,并需要将数组转化为 slice, 例如:
1 | c1 := md5.Sum([]byte(`hello world`)) |
延伸
sha256 方法和 md5 方法的使用方法完全相同,可尝试使用。
1 | c2 := sha256.Sum256([]byte("hello world")) |