-
Notifications
You must be signed in to change notification settings - Fork 0
/
hmac.go
151 lines (124 loc) · 3.59 KB
/
hmac.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package hash
import (
"crypto"
"crypto/hmac"
"encoding/hex"
)
// HmacMd4 签名
func HmacMd4(message string, secret string) string {
return HmacHash(crypto.MD4, message, secret)
}
// HmacMd4 哈希值
func (this Hash) HmacMd4(secret string) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return HmacMd4(newData, secret), nil
})
}
// HmacMd5 签名
func HmacMd5(message string, secret string) string {
return HmacHash(crypto.MD5, message, secret)
}
// HmacMd5 哈希值
func (this Hash) HmacMd5(secret string) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return HmacMd5(newData, secret), nil
})
}
// HmacSHA1 签名
func HmacSHA1(message string, secret string) string {
return HmacHash(crypto.SHA1, message, secret)
}
// HmacSHA1 哈希值
func (this Hash) HmacSHA1(secret string) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return HmacSHA1(newData, secret), nil
})
}
// HmacSha224 签名
func HmacSha224(message string, secret string) string {
return HmacHash(crypto.SHA224, message, secret)
}
// HmacSha224 哈希值
func (this Hash) HmacSha224(secret string) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return HmacSha224(newData, secret), nil
})
}
// HmacSha256 签名
func HmacSha256(message string, secret string) string {
return HmacHash(crypto.SHA256, message, secret)
}
// HmacSha256 哈希值
func (this Hash) HmacSha256(secret string) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return HmacSha256(newData, secret), nil
})
}
// HmacSha384 签名
func HmacSha384(message string, secret string) string {
return HmacHash(crypto.SHA384, message, secret)
}
// HmacSha384 哈希值
func (this Hash) HmacSha384(secret string) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return HmacSha384(newData, secret), nil
})
}
// HmacSha512 签名
func HmacSha512(message string, secret string) string {
return HmacHash(crypto.SHA512, message, secret)
}
// HmacSha512 哈希值
func (this Hash) HmacSha512(secret string) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return HmacSha512(newData, secret), nil
})
}
// HmacSha512 签名
func HmacRipemd160(message string, secret string) string {
return HmacHash(crypto.RIPEMD160, message, secret)
}
// HmacRipemd160 哈希值
func (this Hash) HmacRipemd160(secret string) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return HmacRipemd160(newData, secret), nil
})
}
// 签名
func HmacHash(hash crypto.Hash, message string, secret string) string {
hasher := hmac.New(hash.New, []byte(secret))
hasher.Write([]byte(message))
return hex.EncodeToString(hasher.Sum(nil))
}