Files
crawlab/core/utils/encrypt.go
2024-06-14 15:42:50 +08:00

81 lines
1.7 KiB
Go

package utils
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/hmac"
"crypto/md5"
"crypto/sha256"
"encoding/base64"
"encoding/hex"
"fmt"
"github.com/crawlab-team/crawlab/core/constants"
"io"
)
func GetSecretKey() string {
return constants.DefaultEncryptServerKey
}
func GetSecretKeyBytes() []byte {
return []byte(GetSecretKey())
}
func ComputeHmacSha256(message string, secret string) string {
key := []byte(secret)
h := hmac.New(sha256.New, key)
h.Write([]byte(message))
sha := hex.EncodeToString(h.Sum(nil))
return base64.StdEncoding.EncodeToString([]byte(sha))
}
func EncryptMd5(str string) string {
w := md5.New()
_, _ = io.WriteString(w, str)
md5str := fmt.Sprintf("%x", w.Sum(nil))
return md5str
}
func padding(src []byte, blockSize int) []byte {
padNum := blockSize - len(src)%blockSize
pad := bytes.Repeat([]byte{byte(padNum)}, padNum)
return append(src, pad...)
}
func unPadding(src []byte) []byte {
n := len(src)
unPadNum := int(src[n-1])
return src[:n-unPadNum]
}
func EncryptAES(src string) (res string, err error) {
srcBytes := []byte(src)
key := GetSecretKeyBytes()
block, err := aes.NewCipher(key)
if err != nil {
return res, err
}
srcBytes = padding(srcBytes, block.BlockSize())
blockMode := cipher.NewCBCEncrypter(block, key)
blockMode.CryptBlocks(srcBytes, srcBytes)
res = hex.EncodeToString(srcBytes)
return res, nil
}
func DecryptAES(src string) (res string, err error) {
srcBytes, err := hex.DecodeString(src)
if err != nil {
return res, err
}
key := GetSecretKeyBytes()
block, err := aes.NewCipher(key)
if err != nil {
return res, err
}
blockMode := cipher.NewCBCDecrypter(block, key)
blockMode.CryptBlocks(srcBytes, srcBytes)
res = string(unPadding(srcBytes))
return res, nil
}