python Crypto AES解密后 文件前后部分不一致

问题描述

我对多个文件用相同的key和相同的iv做加密,所以用相同的key和相同的iv做解密。
我用了AES加密,按照规范操作了代码,但是解密出来总是前面有一部分不一致,但是后面的是一样的。如图:

文件原本内容
在这里插入图片描述
解密内容:
在这里插入图片描述
btw,crypto库的aes,同一个对象不能既做加密又做解密的。

问题代码

我加密&解密的是二进制文件。因为是用相同的key和iv解码,我觉得用一个crypto对象就可以了。于是代码写成了这样:
大致的意思就是for循环遍历所有文件,用相同对象去decrypt。

cryptos = AES.new(KEY, CYPHER_MODE, IV)
            
for name in model_names:
       with open(from_path+name,'rb') as source:
           # cryptos = AES.new(KEY, CYPHER_MODE, IV)
           plain_text = cryptos.decrypt(a2b_hex(source.read()))
           with open(to_path+name,'wb') as target:
               target.write(plain_text.rstrip(b'\0'))

问题原因&正确写法

上述代码的问题在于,我用了同一个cryptos对象去decrypt多个文件。导致了解密错误。
不可以用一个cipher去decrypt多个密文,否则会出错。应该每个file对应一个新的cipher。(目前我是通过这种方法解决了这个现象。)

#crypto不应该在这里给所有文件解密,而是在for里面,每个file使用唯一一个crypto
for name in encrypted_model_names:
       with open(from_path+name,'rb') as source:
       	#这里新声明
           cryptos = AES.new(KEY, CYPHER_MODE, IV)
           
           plain_text = cryptos.decrypt(a2b_hex(source.read()))
           with open(to_path+name,'wb') as target:
               target.write(plain_text.rstrip(b'\0'))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值