实验三:AES

实验三:AES

一、问题描述:

实现两个基于 AES 的加密/解密系统,一个在 CBC 模式下使用 AES,另一个在 CTR 模式下使用 AES。 在这两种情况下,16 字节的初始向量 IV 都是随机选择的,并已放在密文中。

测试密文略。

二、实验环境:

系统:Windows 10

IDE:pycharm

编译语言:python

三、程序代码与结果分析:

(1)CBC模式实现

首先是加密函数的部分,我们定义初始化向量,在这里固定了,在实际情况我们应该随机选择,但是实验就简单的固定了。我们首先将密文编码,然后用密码本模式创建一个aes对象,pad是一个匿名函数,作用就是将明文填充到16个字节的整数倍,如果明文恰好是16个字节,我们就再填充一个16字节,填充的内容是与16个字节的差值。

之后我们定义一个密文空间,是字节数组对象,将向量的值放到字节数组的前面,对于每一个明文块和密文快进行异或操作后,送入aes进行加密,加密的结果作为下一个密文块,以此类推,最后返回这个密文。以字节格式返回。

下面是解密函数的实现,首先,我们确定一下密文的类型,统一转到字节类型,然后去除密文前面的向量,初始化一个aes的密码本模式对象,我们将iv和密文分离,对于每一块,我们先解密,在和前一个密文块进行异或,得到的结果添加到明文空间,最后输出民文,这里我们将密文最后的填充部分给去除了。

(2)CTR模式实现

同CBC模式,首先我们定义加密函数,CTR主要和CBC模式不同的就是他有一个计数器,我们将计数器的加密结果异或上明文即是密文块,这样就得到了密文,返回计数值和明文块长度的密文块的和。

我们来看一下计数器是如何生成的,简单来说就是对于每一个明文块我们进行计数,当然要转化为字节类型然后返回即可。

接下来是解密函数的实现,因为加密和解密是对称的,所以我们只需要将密文块的计数器作为加密的iv传入即可

下面是main函数

  1. 运行结果

  • 实验中遇到的问题以及实验体会:

这次实验是对AES的两种加密模式的实现,通过这次实验,我对这两种模式的工作机制也更加熟悉,对于加密过程也更加了解,也有助于我们学习块密码,以及类似加密算法。

这次实验比较简单,而且技术也十分成熟,所以做起来还是挺顺利的,基本上没有遇到问题,有小问题也很快就解决了。

相关资源:

https://download.csdn.net/download/dxxmsl/87699396?spm=1001.2014.3001.5503

 https://www.xsblog.site/<== 我的博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dxxmsl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值