Go AES CBC 256加密解密 ECB

AES CBC(AES Cipher Block Chaining)是一种常用的对称加密算法模式,具有以下好处:

  1. 高度安全性:AES是目前广泛使用的加密算法,具有高度安全性和强大的加密能力。

  2. 随机性:CBC模式每次加密都会使用一个随机的初始向量(IV)来混淆明文,增加了加密的随机性,提高了安全性。

  3. 链式加密:CBC模式下,每个明文块都会与前一个密文块进行异或运算,再进行加密。这种链式加密方式能够提高安全性,因为即使明文中有相同的块,由于前一个密文块的不同,最终加密结果也会不同。

  4. 可逆性:CBC模式是可逆的,可以通过解密操作将密文恢复为明文。

  5. 并行加密:由于每个明文块都是独立加密的,所以可以并行加密多个明文块,提高加密速度。

需要注意的是,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))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值