/
md5.go
69 lines (61 loc) · 1.17 KB
/
md5.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
package go_encrypt
import (
"crypto/md5"
"encoding/base64"
"encoding/hex"
"errors"
"strings"
)
type md5Coder struct {
// 输出字节切片的类型
typ Mode
// 原始内容
src []byte
// 追加内容
append []string
// 连接追加内容使用的字符串
Join string
// 错误
err error
}
func (c *md5Coder) Result() ([]byte,error) {
hash := md5.New()
joins := ""
if len(c.append) > 0 {
joins = strings.Join(c.append,c.Join)
}
_, err := hash.Write(append(c.src,[]byte(joins)...))
bytes := hash.Sum(nil)
if err != nil {
return nil, err
}
switch c.typ {
case SOURCE:
return bytes,nil
case HEX:
return []byte(hex.EncodeToString(bytes)),nil
case BASE64:
return []byte(base64.StdEncoding.EncodeToString(bytes)),nil
default:
return nil, errors.New("mod type is not supported")
}
}
func (c *md5Coder) Err() error {
return c.err
}
func (c *md5Coder) Append(s string) *md5Coder {
c.append = append(c.append,s)
return c
}
func (c *md5Coder) SumString(s string) *md5Coder {
c.src = []byte(s)
return c
}
func (c *md5Coder) SumBytes(s []byte) *md5Coder {
c.src = s
return c
}
func (c *md5Coder) SetJoinStr(s string) *md5Coder {
c.Join = s
return c
}