1
1
package iptv
2
2
3
3
import (
4
- "bytes"
5
- "crypto/des"
6
4
"encoding/hex"
7
- "errors"
8
5
"strings"
9
6
10
7
"github.com/forgoer/openssl"
11
8
)
12
9
13
- // pad 补码函数,将文本填充至块大小的倍数(8字节)
14
- func pad (src []byte ) []byte {
15
- padding := des .BlockSize - len (src )% des .BlockSize
16
- padText := bytes .Repeat ([]byte {byte (padding )}, padding )
17
- return append (src , padText ... )
18
- }
19
-
20
- // unPad 去补码函数,移除填充的数据
21
- func unPad (src []byte ) ([]byte , error ) {
22
- length := len (src )
23
- if length == 0 {
24
- return nil , errors .New ("input is empty" )
25
- }
26
-
27
- // 获取填充的长度
28
- unPadding := int (src [length - 1 ])
29
-
30
- // 检查填充长度是否有效
31
- if unPadding <= 0 || unPadding > length {
32
- return nil , errors .New ("invalid padding size" )
33
- }
34
-
35
- return src [:(length - unPadding )], nil
36
- }
37
-
38
- // removePaddingCharacters 去除补码字符
39
- func removePaddingCharacters (src []byte ) ([]byte , error ) {
40
- // 去除 '\x08' 字符
41
- src = bytes .ReplaceAll (src , []byte {'\x08' }, []byte {})
42
- return src , nil
43
- }
44
-
45
10
type TripleDESCrypto struct {
46
11
key []byte
47
12
}
@@ -62,9 +27,7 @@ func NewTripleDESCrypto(key string) *TripleDESCrypto {
62
27
63
28
// ECBEncrypt 加密函数,返回十六进制字符串
64
29
func (c * TripleDESCrypto ) ECBEncrypt (plainText string ) (string , error ) {
65
- // 补码
66
- paddedText := pad ([]byte (plainText ))
67
- encrypted , err := openssl .Des3ECBEncrypt (paddedText , c .key , openssl .PKCS7_PADDING )
30
+ encrypted , err := openssl .Des3ECBEncrypt ([]byte (plainText ), c .key , openssl .PKCS7_PADDING )
68
31
if err != nil {
69
32
return "" , err
70
33
}
@@ -84,11 +47,5 @@ func (c *TripleDESCrypto) ECBDecrypt(cipherText string) (string, error) {
84
47
return "" , err
85
48
}
86
49
87
- // 去除补码
88
- result , err := removePaddingCharacters (decrypted )
89
- if err != nil {
90
- return "" , err
91
- }
92
-
93
- return string (result ), nil
50
+ return string (decrypted ), nil
94
51
}
0 commit comments