1分钟 aes


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


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

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

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

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

列混淆:
————将输入矩阵与一个矩阵相乘,达到对输入矩阵列混淆的结果,其中一个矩阵在左边,输入矩阵在右边。如图
1分钟 aes_第3张图片
如何计算,举例第一行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_第4张图片
详细过程请见此链接,当然很简单,你肯定能明白,只是人家写的好,所以不想再写了,当然可以不用看前几行,直接看例子就行。

你可能感兴趣的:(我的算法工具集)