From 78cef077e5eb57efa53caebd05515f9f8c7dba98 Mon Sep 17 00:00:00 2001 From: Bobo Date: Wed, 7 May 2025 15:57:19 +0800 Subject: [PATCH] feat: crypto --- crypto/aes.go | 22 +++++++++++++++++----- crypto/aes_test.go | 4 ++-- tag.bat | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/crypto/aes.go b/crypto/aes.go index d70cbad..46435d0 100644 --- a/crypto/aes.go +++ b/crypto/aes.go @@ -40,23 +40,29 @@ func PKCS5UnPadding(origData []byte) []byte { } // AesEncrypt AES加密 -func AesEncrypt(origData, key []byte) ([]byte, error) { +func AesEncrypt(origData, key []byte, iv []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } - //AES分组长度为128位,所以blockSize=16,单位字节 + // AES分组长度为128位,所以blockSize=16,单位字节 blockSize := block.BlockSize() + + if iv == nil { + // 初始向量的长度必须等于块block的长度16字节 + iv = key[:blockSize] + } + origData = PKCS5Padding(origData, blockSize) - blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) //初始向量的长度必须等于块block的长度16字节 + blockMode := cipher.NewCBCEncrypter(block, iv) crypted := make([]byte, len(origData)) blockMode.CryptBlocks(crypted, origData) return crypted, nil } // AesDecrypt AES解密 -func AesDecrypt(crypted, key []byte) ([]byte, error) { +func AesDecrypt(crypted, key []byte, iv []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err @@ -64,7 +70,13 @@ func AesDecrypt(crypted, key []byte) ([]byte, error) { //AES分组长度为128位,所以blockSize=16,单位字节 blockSize := block.BlockSize() - blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) //初始向量的长度必须等于块block的长度16字节 + + if iv == nil { + // 初始向量的长度必须等于块block的长度16字节 + iv = key[:blockSize] + } + + blockMode := cipher.NewCBCDecrypter(block, iv) origData := make([]byte, len(crypted)) blockMode.CryptBlocks(origData, crypted) origData = PKCS5UnPadding(origData) diff --git a/crypto/aes_test.go b/crypto/aes_test.go index 3893eb0..742feac 100644 --- a/crypto/aes_test.go +++ b/crypto/aes_test.go @@ -15,7 +15,7 @@ func TestDecryptAES(t *testing.T) { aesKey = DefaultAESKey plainText := []byte("cloud123456") - encryptText, err := AesEncrypt(plainText, aesKey) + encryptText, err := AesEncrypt(plainText, aesKey, nil) if err != nil { fmt.Println(err) return @@ -30,7 +30,7 @@ func TestDecryptAES(t *testing.T) { return } - decryptText, err := AesDecrypt(bytesPass, aesKey) + decryptText, err := AesDecrypt(bytesPass, aesKey, nil) if err != nil { fmt.Println(err) return diff --git a/tag.bat b/tag.bat index f72943a..cd4211d 100644 --- a/tag.bat +++ b/tag.bat @@ -1,4 +1,4 @@ -git tag v1.1.18 +git tag v1.1.19 git tag bank_card/v1.1.5 git tag geoip/v1.1.5