Commit 4cf89769 authored by hujiebin's avatar hujiebin

feat:加密解密用

parent 6ea0c337
...@@ -31,6 +31,8 @@ const ( ...@@ -31,6 +31,8 @@ const (
TOKEN = "token" TOKEN = "token"
CARRIER = "carrier" // 运营商,460 开头是中国,如:46001,46007 CARRIER = "carrier" // 运营商,460 开头是中国,如:46001,46007
TIMEZONE = "timeZone" // 时区 GMT+8 / GMT+8:00 TIMEZONE = "timeZone" // 时区 GMT+8 / GMT+8:00
InnerEncrypt = "innerEncrypt" // 加密用的key,服务端内部用
) )
/** /**
......
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)
}
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)]
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment