package util import ( "bytes" "crypto/aes" "crypto/cipher" ) // 全零填充 func zero_padding(text []byte, block_size int) []byte { // 计算最后一个区块的长度 last_block := len(text) % block_size // 计算填充长度 padding_len := block_size - last_block // 全零填充 padding := bytes.Repeat([]byte{0}, padding_len) result := append(text, padding...) return result } // 去除填充 func un_padding(encode_text []byte) []byte { // 去除尾部的0 un_pad := bytes.TrimRightFunc(encode_text, func(r rune)bool{ return r == rune(0) }) return un_pad } // AES加密 func AES_encrypt(text, key []byte)([]byte, error) { // 创建密码, 根据密码加密 block, err := aes.NewCipher(key) if err != nil { return nil, err } // 定义大小 (16byte=128bit) block_size := block.BlockSize() // 定义偏移量 iv := key[:block_size] // 填充 text_padded := zero_padding(text, block_size) // 创建加密算法 block_mode := cipher.NewCBCEncrypter(block, iv) // 创建空间 encrypt := make([]byte, len(text_padded)) // 加密 block_mode.CryptBlocks(encrypt, text_padded) return encrypt, nil } // AES解密 func AES_decrypt(text, key []byte)([]byte, error) { // 创建密码, 根据密码解密 block, err := aes.NewCipher(key) if err != nil { return nil, err } // 定义大小 (16byte=128bit) block_size := block.BlockSize() // 定义偏移量 iv := key[:block_size] // 创建加密算法 block_mode := cipher.NewCBCDecrypter(block, iv) // 创建空间 decrypt := make([]byte, len(text)) // 解密 block_mode.CryptBlocks(decrypt, text) // 去除填充 result := un_padding(decrypt) return result, nil }