Go 中签名运算非常简单,crypto 的子包可以完成所有功能。

MD5

引入包

1
import "crypto/md5"

字符串

有两种方式可以对字符串进行 md5 运算

  • 方法一
1
2
3
4
5
6
7
8
9
import (
"crypto/md5"
"fmt"
)

func MD51(message string) string {
res := md5.Sum([]byte(message))
return fmt.Sprintf("%x", res)
}
  • 方法二
1
2
3
4
5
6
7
8
9
10
11
import (
"crypto/md5"
"io"
"fmt"
)

func MD52(message string) string {
h := md5.New()
io.WriteString(h, message)
return fmt.Sprintf("%x", h.Sum(nil))
}

文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import (
"crypto/md5"
"fmt"
"io"
"os"
"log"
)

func MD5File(filePath string) string {
f, err := os.Open(filePath)
if err != nil {
log.Fatal(err)
}
defer f.Close()

h := md5.New()
if _, err := io.Copy(h, f); err != nil {
log.Fatal(err)
}

return fmt.Sprintf("%x", h.Sum(nil))
}

会了一种计算方式其他的都是这个套路,比如 sha1 只需要引入 crypto/sha1 包,然后将 md5 替换为 sha1 即可

Hmac

Hmac 算法在另一个包中可以实现

引入包

1
import "crypto/hmac"

HmacMD5算法

hmac 包需要借助 md5, sha1 等包一起实现相应算法

1
2
3
4
5
6
7
8
9
10
11
import (
"crypto/md5"
"crypto/hmac"
"fmt"
)

func HmacMD5(message string, key string) string {
h := hmac.New(md5.New, []byte(key))
h.Write([]byte(message))
return fmt.Sprintf("%x", h.Sum(nil))
}
03-16 20:18