-
Notifications
You must be signed in to change notification settings - Fork 0
/
shake.go
68 lines (53 loc) · 1.29 KB
/
shake.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
package hash
import (
"encoding/hex"
"golang.org/x/crypto/sha3"
)
// Shake128 哈希值
func Shake128(s string, bits ...int) string {
h := make([]byte, 64)
sha3.ShakeSum128(h, []byte(s))
data := hex.EncodeToString(h)
useBits := 64
if len(bits) > 0 {
useBits = bits[0]
}
if useBits > len(data) {
useBits = len(data)
}
return data[:useBits]
}
// Shake128 哈希值
func (this Hash) Shake128(bits ...int) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return Shake128(newData, bits...), nil
})
}
// Shake256 哈希值
func Shake256(s string, bits ...int) string {
h := make([]byte, 64)
sha3.ShakeSum256(h, []byte(s))
data := hex.EncodeToString(h)
useBits := 512
if len(bits) > 0 {
useBits = bits[0]
}
if useBits > len(data) {
useBits = len(data)
}
return data[:useBits]
}
// Shake256 哈希值
func (this Hash) Shake256(bits ...int) Hash {
return this.FuncHash(func(data ...[]byte) (string, error) {
newData := ""
for _, v := range data {
newData += string(v)
}
return Shake256(newData, bits...), nil
})
}