mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-22 17:31:03 +01:00
81 lines
1.7 KiB
Go
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
|
|
}
|