|
@@ -8,16 +8,18 @@ import (
|
|
|
|
|
|
var (
|
|
var (
|
|
aesKey string
|
|
aesKey string
|
|
|
|
+ aesIV string
|
|
)
|
|
)
|
|
|
|
|
|
// AesCrypto define
|
|
// AesCrypto define
|
|
type AesCrypto struct {
|
|
type AesCrypto struct {
|
|
Key []byte
|
|
Key []byte
|
|
|
|
+ IV []byte
|
|
}
|
|
}
|
|
|
|
|
|
// SetAesCryptoKey set key,
|
|
// SetAesCryptoKey set key,
|
|
-// key length:16, 24, 32 bytes to AES-128, AES-192, AES-256
|
|
|
|
-func SetAesCryptoKey(password string) {
|
|
|
|
|
|
+// key/iv length:16, 24, 32 bytes to AES-128, AES-192, AES-256
|
|
|
|
+func SetAesCryptoKey(password, iv string) {
|
|
aesKey = password
|
|
aesKey = password
|
|
}
|
|
}
|
|
|
|
|
|
@@ -28,12 +30,13 @@ func GetAesCryptoKey() string {
|
|
|
|
|
|
// NewAesCrypto new AesCrypto
|
|
// NewAesCrypto new AesCrypto
|
|
func NewAesCrypto() *AesCrypto {
|
|
func NewAesCrypto() *AesCrypto {
|
|
- return &AesCrypto{[]byte(aesKey)}
|
|
|
|
|
|
+ return &AesCrypto{Key: []byte(aesKey), IV: []byte(aesIV)}
|
|
}
|
|
}
|
|
|
|
|
|
// SetKey set key
|
|
// SetKey set key
|
|
-func (a *AesCrypto) SetKey(key string) {
|
|
|
|
|
|
+func (a *AesCrypto) SetKey(key, iv string) {
|
|
a.Key = []byte(key)
|
|
a.Key = []byte(key)
|
|
|
|
+ a.IV = []byte(iv)
|
|
}
|
|
}
|
|
|
|
|
|
// Encrypt encrypt data
|
|
// Encrypt encrypt data
|
|
@@ -45,7 +48,7 @@ func (a *AesCrypto) Encrypt(data []byte) ([]byte, error) {
|
|
blockSize := block.BlockSize()
|
|
blockSize := block.BlockSize()
|
|
data = pkcs5Padding(data, blockSize)
|
|
data = pkcs5Padding(data, blockSize)
|
|
|
|
|
|
- blockMode := cipher.NewCBCEncrypter(block, a.Key[:blockSize])
|
|
|
|
|
|
+ blockMode := cipher.NewCBCEncrypter(block, a.IV[:blockSize])
|
|
crypted := make([]byte, len(data))
|
|
crypted := make([]byte, len(data))
|
|
|
|
|
|
blockMode.CryptBlocks(crypted, data)
|
|
blockMode.CryptBlocks(crypted, data)
|
|
@@ -59,7 +62,7 @@ func (a *AesCrypto) Decrypt(crypted []byte) ([]byte, error) {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
blockSize := block.BlockSize()
|
|
blockSize := block.BlockSize()
|
|
- blockMode := cipher.NewCBCDecrypter(block, a.Key[:blockSize])
|
|
|
|
|
|
+ blockMode := cipher.NewCBCDecrypter(block, a.IV[:blockSize])
|
|
origData := make([]byte, len(crypted))
|
|
origData := make([]byte, len(crypted))
|
|
blockMode.CryptBlocks(origData, crypted)
|
|
blockMode.CryptBlocks(origData, crypted)
|
|
origData = pkcs5UnPadding(origData)
|
|
origData = pkcs5UnPadding(origData)
|