AES CBC(AES Cipher Block Chaining)是一种常用的对称加密算法模式,具有以下好处:
-
高度安全性:AES是目前广泛使用的加密算法,具有高度安全性和强大的加密能力。
-
随机性:CBC模式每次加密都会使用一个随机的初始向量(IV)来混淆明文,增加了加密的随机性,提高了安全性。
-
链式加密:CBC模式下,每个明文块都会与前一个密文块进行异或运算,再进行加密。这种链式加密方式能够提高安全性,因为即使明文中有相同的块,由于前一个密文块的不同,最终加密结果也会不同。
-
可逆性:CBC模式是可逆的,可以通过解密操作将密文恢复为明文。
-
并行加密:由于每个明文块都是独立加密的,所以可以并行加密多个明文块,提高加密速度。
需要注意的是,CBC模式也有一些潜在的问题,例如需要额外的初始向量和填充操作,以及对数据完整性的验证。因此,在使用AES CBC加密时,需要根据具体情况综合考虑安全性和效率。
CBC解密代码
func main() {
// 解密密钥和向量
key := []byte("1231231232131") //秘钥
iv := []byte("123123")//偏移量必须填
// 需要解密的密文
ciphertext := "密文"
// Base64解码密文
ciphertextBytes, err := base64.StdEncoding.DecodeString(ciphertext)
if err != nil {
fmt.Println("解码密文失败:", err)
return
}
// 创建AES解密器
block, err := aes.NewCipher(key)
if err != nil {
fmt.Println("创建解密器失败:", err)
return
}
// 使用CBC模式解密
mode := cipher.NewCBCDecrypter(block, iv)
mode.CryptBlocks(ciphertextBytes, ciphertextBytes)
// 去除填充数据
unpadding := int(ciphertextBytes[len(ciphertextBytes)-1])
plaintext := ciphertextBytes[:len(ciphertextBytes)-unpadding]
// 输出解密后的结果
fmt.Println("解密后的数据:", string(plaintext))
}
CBC加密
origData :="123213"//待加密的数据
// 分组秘钥
// NewCipher该函数限制了输入k的长度必须为16, 24或者32
block, _ := aes.NewCipher(key)
blockSize := block.BlockSize() // 获取秘钥块的长度
origData = pkcs5Padding(origData, blockSize) // 补全码
blockMode := cipher.NewCBCEncrypter(block, iv) // 加密模式
encrypted := make([]byte, len(origData)) // 创建数组
blockMode.CryptBlocks(encrypted, origData) // 加密
// 输出加密后的结果
fmt.Println("加密后的数据:", string(encrypted))