From 4cf897697487df04cde1734afc56d6766c1e8b52 Mon Sep 17 00:00:00 2001 From: hujiebin Date: Sun, 25 Jun 2023 10:58:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=8A=A0=E5=AF=86=E8=A7=A3=E5=AF=86?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mycontext/context.go | 2 ++ test/utils_test.go | 27 ++++++++++++++ utils/encrypt.go | 85 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 test/utils_test.go create mode 100644 utils/encrypt.go diff --git a/mycontext/context.go b/mycontext/context.go index df722e7..89c22fb 100644 --- a/mycontext/context.go +++ b/mycontext/context.go @@ -31,6 +31,8 @@ const ( TOKEN = "token" CARRIER = "carrier" // 运营商,460 开头是中国,如:46001,46007 TIMEZONE = "timeZone" // 时区 GMT+8 / GMT+8:00 + + InnerEncrypt = "innerEncrypt" // 加密用的key,服务端内部用 ) /** diff --git a/test/utils_test.go b/test/utils_test.go new file mode 100644 index 0000000..438bcac --- /dev/null +++ b/test/utils_test.go @@ -0,0 +1,27 @@ +package test + +import ( + "git.hilo.cn/hilo-common/utils" + "testing" +) + +type UserTest struct { + Name string `json:"name"` + Age int `json:"age"` +} + +func TestEncryptionData(t *testing.T) { + u := UserTest{ + Name: "jiebin", + Age: 10, + } + e := utils.EncryptionData(u, []byte("hilo!@#$%^&*()_+")) + println(e) +} + +func TestDecryptionData(t *testing.T) { + str := "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" + //str = "xzzfwpb6ciRMyLbIajjy+trSsKysmQqCqR29vldutp4=" + e, err := utils.Decryption(str, []byte("hilo!@#$%^&*()_+")) + t.Logf("%v-%v", e, err) +} diff --git a/utils/encrypt.go b/utils/encrypt.go new file mode 100644 index 0000000..7e698aa --- /dev/null +++ b/utils/encrypt.go @@ -0,0 +1,85 @@ +package utils + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "encoding/base64" + "encoding/json" + "errors" +) + +func EncryptionData(data interface{}, aeskey []byte) string { + str, _ := json.Marshal(data) + pass := str + xpass, err := aesEncrypt(pass, aeskey) + if err != nil { + return "" + } + pass64 := base64.StdEncoding.EncodeToString(xpass) + return pass64 +} + +func Encryption(str string, aeskey []byte) string { + pass := []byte(str) + xpass, err := aesEncrypt(pass, aeskey) + if err != nil { + return "" + } + pass64 := base64.StdEncoding.EncodeToString(xpass) + return pass64 +} + +func aesEncrypt(origData, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + + blockSize := block.BlockSize() + origData = pKCS5Padding(origData, blockSize) + blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) + crypted := make([]byte, len(origData)) + blockMode.CryptBlocks(crypted, origData) + return crypted, nil +} + +func pKCS5Padding(ciphertext []byte, blockSize int) []byte { + padding := blockSize - len(ciphertext)%blockSize + padtext := bytes.Repeat([]byte{byte(padding)}, padding) + return append(ciphertext, padtext...) +} + +func Decryption(str string, aeskey []byte) (string, error) { + pass64, err := base64.StdEncoding.DecodeString(str) + if err != nil { + return "", err + } + xpass, err := aesDecrypt(pass64, aeskey) + if err != nil { + return "", err + } + return string(xpass), nil +} + +func aesDecrypt(crypted, key []byte) ([]byte, error) { + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + if len(crypted)%blockSize != 0 { + return nil, errors.New("crypto/cipher: input not full blocks") + } + blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) + origData := make([]byte, len(crypted)) + blockMode.CryptBlocks(origData, crypted) + origData = pKCS5UnPadding(origData) + return origData, nil +} + +func pKCS5UnPadding(origData []byte) []byte { + length := len(origData) + unpadding := int(origData[length-1]) + return origData[:(length - unpadding)] +} -- 2.22.0