-
Notifications
You must be signed in to change notification settings - Fork 21
/
encrypt.go
128 lines (99 loc) · 2.45 KB
/
encrypt.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
package crypto
import (
"fmt"
"github.com/deatil/go-cryptobin/tool"
)
// 加密类型
// Encrypt Type
var UseEncrypt = NewDataSet[Multiple, IEncrypt]()
// 模式
// Encrypt Mode
var UseMode = NewDataSet[Mode, IMode]()
// 补码
// Encrypt Padding
var UsePadding = NewDataSet[Padding, IPadding]()
// 获取加密解密方式
// get Encrypt type
func getEncrypt(m Multiple) (IEncrypt, error) {
if !UseEncrypt.Has(m) {
err := fmt.Errorf("Multiple [%s] is error.", m)
return nil, err
}
// 类型
// Encrypt type
newEncrypt := UseEncrypt.Get(m)
return newEncrypt(), nil
}
// 加密
// Encrypt
func (this Cryptobin) Encrypt() Cryptobin {
err := tool.Recover(func() {
this = this.encrypt()
})
if err != nil {
return this.AppendError(err).triggerError()
}
return this
}
func (this Cryptobin) encrypt() Cryptobin {
// 加密解密
// Encrypt
newEncrypt, err := getEncrypt(this.multiple)
if err != nil {
return this.AppendError(err).triggerError()
}
dst, err := newEncrypt.Encrypt(this.data, NewConfig(this))
if err != nil {
return this.AppendError(err).triggerError()
}
this.parsedData = dst
return this.triggerError()
}
// 解密
// Decrypt
func (this Cryptobin) Decrypt() Cryptobin {
err := tool.Recover(func() {
this = this.decrypt()
})
if err != nil {
return this.AppendError(err).triggerError()
}
return this
}
func (this Cryptobin) decrypt() Cryptobin {
// 加密解密
// Encrypt
newEncrypt, err := getEncrypt(this.multiple)
if err != nil {
return this.AppendError(err).triggerError()
}
dst, err := newEncrypt.Decrypt(this.data, NewConfig(this))
if err != nil {
return this.AppendError(err).triggerError()
}
this.parsedData = dst
return this.triggerError()
}
// ====================
// 方法加密
// Func Encrypt
func (this Cryptobin) FuncEncrypt(fn func(Cryptobin) Cryptobin) Cryptobin {
err := tool.Recover(func() {
this = fn(this).triggerError()
})
if err != nil {
return this.AppendError(err).triggerError()
}
return this
}
// 方法解密
// Func Decrypt
func (this Cryptobin) FuncDecrypt(fn func(Cryptobin) Cryptobin) Cryptobin {
err := tool.Recover(func() {
this = fn(this).triggerError()
})
if err != nil {
return this.AppendError(err).triggerError()
}
return this
}