1分钟 aes


能帮到你的话,就给个赞吧 ????


我们先熟悉aes流程。
首先 aes 会把明文等分为128位一组(也就是16字节),接着分组加密,也就是对每个分组进行组加密,之后再将所有组密文按顺序拼接,生成密文。
如何进行连接呢 也就是所谓的cbc模式。如图
1分钟 aes
每个分组的**是相同的,都是同一个,而cbc多了初始向量IV并把之后的每个密文块都作为下个的初始向量,这样比单纯的分别**加密再连接安全许多。
接着我们再详细介绍组加密。
我们先熟悉组加密流程。
1分钟 aes
首先我们需要知道的是,每次轮**加都需要一个新的**,第一次就是初始化的那个,后面十次也就都是重新生成的,我们把生成轮**的过程叫做**扩展,这也是图中唯一没画出的过程,因为不知道怎么画在哪里比较好~~我们可以认为每次轮**加操作都需要调用**扩展来生成一个新**,至于为什么要叫做**扩展,等介绍到便知。

那么我们一一了解过程即可。
轮**加:
————在aes中,加’+‘,这个符号指的都是异或操作。那么轮**加,顾名思义,也就是一个异或操作,会和轮**异或得到输出。我们可以认为轮**加的输入为两个,一个是轮**,另一个随意,反正就是异或而已。则第一个轮**加的输入分别为初始化的**和明文矩阵。

s盒置换:
————s盒是一张16x16表,对矩阵中的每个字节进行查表替换,一个字节有8位嘛,所以4位对行,4位对列,便可查,查完替换。

行移位:
————4x4矩阵为例,第一行不变,第二行向左移一位,第三行左移2位,第四行左移3位。当然这个移位不是补0,而是移过去。

列混淆:
————将输入矩阵与一个矩阵相乘,达到对输入矩阵列混淆的结果,其中一个矩阵在左边,输入矩阵在右边。如图
1分钟 aes
如何计算,举例第一行x第一列=02x87+03x6E+01x46+01*A6
我们前面说过,+法为异或操作,接着我们再说乘法x。
x * 01,为x本身
x * 02,x的二进制左移一位(这次是补0的左移),如果溢出(即如果x的二进制最高位为1),那么要再异或上 1B
x * 03,结果为 x * (02+01) =x * 02+x * 01,注意+号都是异或。
以此类比x乘其他,都可转化为乘1或2.

则 02 * 87

87的二进制位 1000 0111,左移一位得到 0000 1110,因为本身的二进制最高位为1,所以再异或 1B即
00001110 + 00011011
得到 00010101 即:15

同理 03*6E = B2

01 * 46 = 46

01 * A6 = A6

于是第一行 第一列的值为 15 + B2 + 46 + A6 = 47

接下来再讲**扩展。为什么要叫**扩展呢,因为他真的只是初始**扩展而来~。如图 不用细看,只需要感觉到为什么叫扩展就好。
1分钟 aes
详细过程请见此链接,当然很简单,你肯定能明白,只是人家写的好,所以不想再写了,当然可以不用看前几行,直接看例子就行。