最近在使用Gin重构之前用SpringBoot写的后台程序,数据库中保存的密码是加了盐并经过两次hash的MD5值,之前SpringBoot是调用的Shiro进行两次MD5运算。查了一圈发现Golang的MD5工具库并没有提供加盐、加密次数的封装,并且也没有博客提及,所以这里记录一下自己封装的带加盐和加密次数的MD5函数
Golang中使用MD5库
Golang自带的crypto加密库中有MD5函数的实现,主要使用方式有两种,一种是调用write将要计算的byte数组提前写入block块中,调用sum时传入nil;二是直接将byte数组传入sum函数,如下所示:
package utils
import (
"crypto/md5"
"encoding/hex"
)
// 方式一通过Write传参
func MD5(str string) string {
b := []byte(str)
h := md5.New()
h.Write(b)
return hex.EncodeToString(h.Sum(nil))
}
// 方式二通过Sum传参
func MD5_2(str string) string {
b := []byte(str)
h := md5.New()
return hex.EncodeToString(h.Sum(b))
}
若要加盐的话,在第一种方式的基础上再把salt給write进去,如下所示:
func MD5_SALT(str string, salt string) string {
b := []byte(str)
s := []byte(salt)
h := md5.New()
h.Write(s) // 先写盐值