aes 密文长度_20210103现代密码AES再深入

点击上面 蓝字 关注,谢谢。 52242db492b35d1510b844c6e7805a47.png
大家好,这里是求道轩,我是求道仙人。 给我5分钟,带你看世界。

昨天AES的题目慢慢想还是可以理解,虽然遇到新题不一定会做,内部加密原理也不懂。
今天这个模式稍微难点了。

[来源]
集团信安新平台-Crypto训练专题

[工具]
python

[知识点]

AES

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法,对称加密算法也就是加密和解密用相同的密钥。
昨天了解了ECB模式,最简单的模式,每组相互独立。
今天看另一个模式,密码分组链接模式(Cipher Block Chaining (CBC))

99ed46fcab0a95aaf9b11d9a3372ff64.png

CBC模式

相对于昨天的ECB模式,多了一个初始随机向量IV,长度128位,明文块先异或运算后再实验key加密,每组明文密码不独立,后一段明文与前一段密码异或后再加密。
简单说密文i不仅和明文i有关,还和密文i-1有关。随机向量IV相当于初始密文。

下来做几道题。

[解析]

AES00 EasyCrypt

简单入门题,核心代码如下

class aesdemo:
……
def encrypt(self, plaintext):
# 生成随机初始向量IV
iv = Random.new().read(16)
aes = AES.new(self.key,AES.MODE_CBC,iv)
prev_pt = iv
prev_ct = iv
ct=""

msg=self.pad(plaintext)
for block in self.split_by(msg, 16):
ct_block = self.xor(block, prev_pt)
ct_block = aes.encrypt(ct_block)
ct_block = self.xor(ct_block, prev_ct)
ct += ct_block

return b2a_hex(iv + ct)



# 测试模块
if __name__ == '__main__':
BS = AES.block_size # aes数据分组长度为128 bit
key="asdfghjkl1234567890qwertyuiopzxc"
demo = aesdemo(key)
e = demo.encrypt(flag)
print("加密:", e)
  • 已知key,通过CBC模式自定义AES加密flag并输出

  • 自定义加密函数随机生成向量IV,然后每个明文块mi先异或IV,再AES,在异或IV得到密文块ci

  • 全部ci拼接起来前面加上IV返回转为16进制输出。

对于加密结果da1203c923a202adb4076abab6232e5288c65a65380dbe82d18c47b1613

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值