package helper import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" ) // PKCS7Padding 对数据进行填充 func PKCS7Padding(data []byte, blockSize int) []byte { padding := blockSize - len(data)%blockSize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(data, padtext...) } // PKCS7UnPadding 去除填充 func PKCS7UnPadding(data []byte) []byte { length := len(data) unpadding := int(data[length-1]) return data[:(length - unpadding)] } // EncryptAES 对数据进行 AES 加密 func EncryptAES(str, key_str string) (string, error) { plaintext := []byte(str) key := []byte(key_str) // 创建一个新的 AES 块 block, err := aes.NewCipher(key) if err != nil { return "", err } // 块大小 blockSize := block.BlockSize() // 对明文进行填充 plaintext = PKCS7Padding(plaintext, blockSize) // 创建一个 CBC 模式的加密块 ciphertext := make([]byte, len(plaintext)) mode := cipher.NewCBCEncrypter(block, key[:blockSize]) // 加密数据 mode.CryptBlocks(ciphertext, plaintext) // 将加密结果进行 Base64 编码 return base64.StdEncoding.EncodeToString(ciphertext), nil } // DecryptAES 对数据进行 AES 解密 func DecryptAES(ciphertext, key_str string) ([]byte, error) { key := []byte(key_str) // 对 Base64 编码的密文进行解码 ciphertextBytes, err := base64.StdEncoding.DecodeString(ciphertext) if err != nil { return nil, err } // 创建一个新的 AES 块 block, err := aes.NewCipher(key) if err != nil { return nil, err } // 块大小 blockSize := block.BlockSize() // 创建一个 CBC 模式的解密块 mode := cipher.NewCBCDecrypter(block, key[:blockSize]) // 解密数据 plaintext := make([]byte, len(ciphertextBytes)) mode.CryptBlocks(plaintext, ciphertextBytes) // 去除填充 plaintext = PKCS7UnPadding(plaintext) return plaintext, nil }