有关AES的CBC模式加解密安全漏洞的实践

(1)CBC模式的原理

       这种模式是先将明文切分成若干小段,然后每一小段与初始块(IV向量)或者上一段的密文段进行异或运算后,再与密钥进行加密,第一个数据块进行加密之前需要用初始化向量IV进行异或操作。  
image

(此图和以上原理参考于网络)

(2)漏洞复现

       鄙人在实际开发API服务中用到了cbc模式的加密算法,但测试过程中却发现了此算法有安全漏洞,而且比较容易复现!下面是用于复现的测试代码:
cbc.go(填充模式PKCS5和PKCS7都适用)

package cbc

import (
	"bytes"
	"crypto/aes"
	"crypto/cipher"
	"encoding/base64"
	"fmt"
)

func encryptCBC(text []byte, aesKey, aesIV string) (encryptData string, err error) {
	fmt.Println("encryptCBC-Key:", aesKey)
	block, err := aes.NewCipher([]byte(aesKey))
	if err != nil {
		fmt.Println("encryptCBC NewCipher ERR:", err.Error())
		return "", err
	}

	blockSize := block.BlockSize()
	originData := pad(text, blockSize)

	fmt.Println("encryptCBC-IV:", aesIV)
	blockMode := cipher.NewCBCEncrypter(block, []byte(aesIV))
	encrypt := make([]byte, len(originData))
	blockMode.CryptBlocks(encrypt, originData)
	encryptData = base64.StdEncoding.EncodeToString(encrypt)
	return
}

fu
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值