|
@@ -2,6 +2,8 @@ package utils
|
|
|
|
|
|
import (
|
|
|
"bufio"
|
|
|
+ "crypto/cipher"
|
|
|
+ "crypto/des"
|
|
|
"crypto/hmac"
|
|
|
"crypto/md5"
|
|
|
"crypto/sha1"
|
|
@@ -1210,3 +1212,41 @@ func TimeTransferString(format string, t time.Time) string {
|
|
|
}
|
|
|
return str
|
|
|
}
|
|
|
+
|
|
|
+func DesBase64Decrypt(crypted []byte, desKey string) []byte {
|
|
|
+ result, _ := base64.StdEncoding.DecodeString(string(crypted))
|
|
|
+ remain := len(result) % 8
|
|
|
+ if remain > 0 {
|
|
|
+ mod := 8 - remain
|
|
|
+ for i := 0; i < mod; i++ {
|
|
|
+ result = append(result, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ origData, err := TripleDesDecrypt(result, []byte(desKey))
|
|
|
+ if err != nil {
|
|
|
+ panic(any(err))
|
|
|
+ }
|
|
|
+ return origData
|
|
|
+}
|
|
|
+
|
|
|
+// // 3DES解密
|
|
|
+func TripleDesDecrypt(crypted, key []byte) ([]byte, error) {
|
|
|
+ block, err := des.NewTripleDESCipher(key)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ blockMode := cipher.NewCBCDecrypter(block, key[:8])
|
|
|
+ origData := make([]byte, len(crypted))
|
|
|
+ // origData := crypted
|
|
|
+ blockMode.CryptBlocks(origData, crypted)
|
|
|
+ origData = PKCS5UnPadding(origData)
|
|
|
+ // origData = ZeroUnPadding(origData)
|
|
|
+ return origData, nil
|
|
|
+}
|
|
|
+
|
|
|
+func PKCS5UnPadding(origData []byte) []byte {
|
|
|
+ length := len(origData)
|
|
|
+ // 去掉最后一个字节 unpadding 次
|
|
|
+ unpadding := int(origData[length-1])
|
|
|
+ return origData[:(length - unpadding)]
|
|
|
+}
|