基于matlab的AES加解密算法仿真

264 阅读18分钟

1.算法描述

        AES算法在对明文加密的时候,并不是把整个明文一股脑的加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit。这些明文块经过AES加密器复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密的结果。

 

       但这里涉及到一个问题,假如一段明文长度是196bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有64bit,不足128bit。这时候怎么办呢?就需要对明文块进行填充(Padding) 。

 

几种典型的填充方式:

 

NoPadding: 不做任何填充,但是要求明文必须是16字节的整数倍。

PKCS5Padding(默认): 如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字符,且每个字节的值等于缺少的字符数。 比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则补全为{1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6 }

ISO10126Padding:如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字节,最后一个字符值等于缺少的字符数,其他字符填充随机数。比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则可能补全为{1,2,3,4,5,a,b,c,d,e,5,c,3,G,$,6}

PKCS7Padding原理与PKCS5Padding相似,区别是PKCS5Padding的blocksize为8字节,而PKCS7Padding的blocksize可以为1到255字节

 

       需要注意的是,如果在AES加密的时候使用了某一种填充方式,解密的时候也必须采用同样的填充方式。

 

        殊的加法和乘法。AES 所用的加法和乘法是基于数学(译者注:近世代数)的域论。尤其是 AES 基于有限域GF(2^8)。

       GF(2^8)由一组从 0x00 到 0xff 的256个值组成,加上加法和乘法,因此是(2^8)。GF代表伽罗瓦域,以发明这一理论的数学家的名字命名。GF(2^8) 的一个特性是一个加法或乘法的操作的结果必须是在{0x00 ... 0xff}这组数中。虽然域论是相当深奥的,但GF(2^8)加法的最终结果却很简单。GF(2^8) 加法就是异或(XOR)操作。

        然而,GF(2^8)的乘法有点繁难。AES的加密和解密例程需要知道怎样只用七个常量 0x01、0x02、0x03、0x09、0x0b、0x0d 和 0x0e 来相乘。所以我不全面介绍GF(2^8)的乘法,而只是针对这七种特殊情况进行说明。

  在GF(2^8)中用0x01的乘法是特殊的;它相当于普通算术中用1做乘法并且结果也同样—任何值乘0x01等于其自身。

       现在让我们看看用0x02做乘法。和加法的情况相同,理论是深奥的,但最终结果十分简单。只要被乘的值小于0x80,这时乘法的结果就是该值左移1比特位。如果被乘的值大于或等于0x80,这时乘法的结果就是左移1比特位再用值0x1b异或。它防止了“域溢出”并保持乘法的乘积在范围以内。

       一旦你在GF(2^8)中用0x02建立了加法和乘法,你就可以用任何常量去定义乘法。用0x03做乘法时,你可以将 0x03 分解为2的幂之和。为了用 0x03 乘以任意字节b, 因为 0x03 = 0x02 + 0x01,因此:

b * 0x03 = b * (0x02 + 0x01) = (b * 0x02) + (b * 0x01)

       这是可以行得通的,因为你知道如何用 0x02 和 0x01 相乘和相加,同理,用0x0d去乘以任意字节b可以这样做:

 

b * 0x0d   = b * (0x08 + 0x04 + 0x01)

 

= (b * 0x08) + (b * 0x04) + (b * 0x01)

 

= (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x01)

 

在加解密算法中,AES MixColumns 例程的其它乘法遵循大体相同的模式,如下所示:

 

b * 0x09   = b * (0x08 + 0x01)

 

= (b * 0x02 * 0x02 * 0x02) + (b * 0x01)b * 0x0b

 

= b * (0x08 + 0x02 + 0x01)

 

= (b * 0x02 * 0x02 * 0x02) + (b * 0x02) + (b * 0x01)b * 0x0e

 

= b * (0x08 +0x04 + 0x02)

 

= (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x02)  

 

总之,在GF(2^8)中,加法是异或操作。其乘法将分解成加法和用0x02做的乘法,而用0x02做的乘法是一个有条件的左移1比特位。AES规范中包括大量有关GF(2^8)操作的附加信息。

 

2.仿真效果预览

matlab2022a仿真结果如下:

`s_box : 63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76

            ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0

            b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15

            04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75

            09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84

            53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf

            d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8

            51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2

            cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73

            60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db

            e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79

            e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08

            ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a

            70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e

            e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df

            8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16

 

inv_s_box : 52 09 6a d5 30 36 a5 38 bf 40 a3 9e 81 f3 d7 fb

            7c e3 39 82 9b 2f ff 87 34 8e 43 44 c4 de e9 cb

            54 7b 94 32 a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e

            08 2e a1 66 28 d9 24 b2 76 5b a2 49 6d 8b d1 25

            72 f8 f6 64 86 68 98 16 d4 a4 5c cc 5d 65 b6 92

            6c 70 48 50 fd ed b9 da 5e 15 46 57 a7 8d 9d 84

            90 d8 ab 00 8c bc d3 0a f7 e4 58 05 b8 b3 45 06

            d0 2c 1e 8f ca 3f 0f 02 c1 af bd 03 01 13 8a 6b

            3a 91 11 41 4f 67 dc ea 97 f2 cf ce f0 b4 e6 73

            96 ac 74 22 e7 ad 35 85 e2 f9 37 e8 1c 75 df 6e

            47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aa 18 be 1b

            fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 cd 5a f4

            1f dd a8 33 88 07 c7 31 b1 12 10 59 27 80 ec 5f

            60 51 7f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c ef

            a0 e0 3b 4d ae 2a f5 b0 c8 eb bb 3c 83 53 99 61

            17 2b 04 7e ba 77 d6 26 e1 69 14 63 55 21 0c 7d

 

 


  •                                          *

  •        R C O N   C R E A T I O N         *

  •                                          *


 

rcon : 01 00 00 00

       02 00 00 00

       04 00 00 00

       08 00 00 00

       10 00 00 00

       20 00 00 00

       40 00 00 00

       80 00 00 00

       1b 00 00 00

       36 00 00 00

 

 


  •                                          *

  •        K E Y   E X P A N S I O N         *

  •                                          *


 

w(1:4, :) :       00 01 02 03

                  04 05 06 07

                  08 09 0a 0b

                  0c 0d 0e 0f

 

After rot_word :  0d 0e 0f 0c

 

After sub_bytes : d7 ab 76 fe

 

rcon(05, :) :     01 00 00 00

 

After rcon xor :  d6 ab 76 fe

 

w(05, :) :        d6 aa 74 fd

 

w(06, :) :        d2 af 72 fa

 

w(07, :) :        da a6 78 f1

 

w(08, :) :        d6 ab 76 fe

 

After rot_word :  ab 76 fe d6

 

After sub_bytes : 62 38 bb f6

 

rcon(09, :) :     02 00 00 00

 

After rcon xor :  60 38 bb f6

 

w(09, :) :        b6 92 cf 0b

 

w(10, :) :        64 3d bd f1

 

w(11, :) :        be 9b c5 00

 

w(12, :) :        68 30 b3 fe

 

After rot_word :  30 b3 fe 68

 

After sub_bytes : 04 6d bb 45

 

rcon(13, :) :     04 00 00 00

 

After rcon xor :  00 6d bb 45

 

w(13, :) :        b6 ff 74 4e

 

w(14, :) :        d2 c2 c9 bf

 

w(15, :) :        6c 59 0c bf

 

w(16, :) :        04 69 bf 41

 

After rot_word :  69 bf 41 04

 

After sub_bytes : f9 08 83 f2

 

rcon(17, :) :     08 00 00 00

 

After rcon xor :  f1 08 83 f2

 

w(17, :) :        47 f7 f7 bc

 

w(18, :) :        95 35 3e 03

 

w(19, :) :        f9 6c 32 bc

 

w(20, :) :        fd 05 8d fd

 

After rot_word :  05 8d fd fd

 

After sub_bytes : 6b 5d 54 54

 

rcon(21, :) :     10 00 00 00

 

After rcon xor :  7b 5d 54 54

 

w(21, :) :        3c aa a3 e8

 

w(22, :) :        a9 9f 9d eb

 

w(23, :) :        50 f3 af 57

 

w(24, :) :        ad f6 22 aa

 

After rot_word :  f6 22 aa ad

 

After sub_bytes : 42 93 ac 95

 

rcon(25, :) :     20 00 00 00

 

After rcon xor :  62 93 ac 95

 

w(25, :) :        5e 39 0f 7d

 

w(26, :) :        f7 a6 92 96

 

w(27, :) :        a7 55 3d c1

 

w(28, :) :        0a a3 1f 6b

 

After rot_word :  a3 1f 6b 0a

 

After sub_bytes : 0a c0 7f 67

 

rcon(29, :) :     40 00 00 00

 

After rcon xor :  4a c0 7f 67

 

w(29, :) :        14 f9 70 1a

 

w(30, :) :        e3 5f e2 8c

 

w(31, :) :        44 0a df 4d

 

w(32, :) :        4e a9 c0 26

 

After rot_word :  a9 c0 26 4e

 

After sub_bytes : d3 ba f7 2f

 

rcon(33, :) :     80 00 00 00

 

After rcon xor :  53 ba f7 2f

 

w(33, :) :        47 43 87 35

 

w(34, :) :        a4 1c 65 b9

 

w(35, :) :        e0 16 ba f4

 

w(36, :) :        ae bf 7a d2

 

After rot_word :  bf 7a d2 ae

 

After sub_bytes : 08 da b5 e4

 

rcon(37, :) :     1b 00 00 00

 

After rcon xor :  13 da b5 e4

 

w(37, :) :        54 99 32 d1

 

w(38, :) :        f0 85 57 68

 

w(39, :) :        10 93 ed 9c

 

w(40, :) :        be 2c 97 4e

 

After rot_word :  2c 97 4e be

 

After sub_bytes : 71 88 2f ae

 

rcon(41, :) :     36 00 00 00

 

After rcon xor :  47 88 2f ae

 

w(41, :) :        13 11 1d 7f

 

w(42, :) :        e3 94 4a 17

 

w(43, :) :        f3 07 a7 8b

 

w(44, :) :        4d 2b 30 c5

 

 


  •                                          *

  •    P O L Y _ M A T   C R E A T I O N     *

  •                                          *


 

    poly_mat : 02 03 01 01

               01 02 03 01

               01 01 02 03

               03 01 01 02

 

inv_poly_mat : 0e 0b 0d 09

               09 0e 0b 0d

               0d 09 0e 0b

               0b 0d 09 0e

 

 


  •                                          *

  •               C I P H E R                *

  •                                          *


 

Initial state :                  00 44 88 cc

                                 11 55 99 dd

                                 22 66 aa ee

                                 33 77 bb ff

 

Initial round key :              00 04 08 0c

                                 01 05 09 0d

                                 02 06 0a 0e

                                 03 07 0b 0f

 

State at start of round 1 :      00 40 80 c0

                                 10 50 90 d0

                                 20 60 a0 e0

                                 30 70 b0 f0

 

After sub_bytes :                63 09 cd ba

                                 ca 53 60 70

                                 b7 d0 e0 e1

                                 04 51 e7 8c

 

After shift_rows :               63 09 cd ba

                                 53 60 70 ca

                                 e0 e1 b7 d0

                                 8c 04 51 e7

 

After mix_columns :              5f 57 f7 1d

                                 72 f5 be b9

                                 64 bc 3b f9

                                 15 92 29 1a

 

Round key :                      d6 d2 da d6

                                 aa af a6 ab

                                 74 72 78 76

                                 fd fa f1 fe

 

State at start of round 2 :      89 85 2d cb

                                 d8 5a 18 12

                                 10 ce 43 8f

                                 e8 68 d8 e4

 

After sub_bytes :                a7 97 d8 1f

                                 61 be ad c9

                                 ca 8b 1a 73

                                 9b 45 61 69

 

After shift_rows :               a7 97 d8 1f

                                 be ad c9 61

                                 1a 73 ca 8b

                                 69 9b 45 61

 

After mix_columns :              ff 31 64 77

                                 87 d8 51 3a

                                 96 6a 51 d0

                                 84 51 fa 09

 

Round key :                      b6 64 be 68

                                 92 3d 9b 30

                                 cf bd c5 b3

                                 0b f1 00 fe

 

State at start of round 3 :      49 55 da 1f

                                 15 e5 ca 0a

                                 59 d7 94 63

                                 8f a0 fa f7

 

After sub_bytes :                3b fc 57 c0

                                 59 d9 74 67

                                 cb 0e 22 fb

                                 73 e0 2d 68

 

After shift_rows :               3b fc 57 c0

                                 d9 74 67 59

                                 22 fb cb 0e

                                 68 73 e0 2d

 

After mix_columns :              4c f7 2c 53

                                 9c 71 3f 4d

                                 1e f0 86 f2

                                 66 76 8e 56

 

Round key :                      b6 d2 6c 04

                                 ff c2 59 69

                                 74 c9 0c bf

                                 4e bf bf 41

 

State at start of round 4 :      fa 25 40 57

                                 63 b3 66 24

                                 6a 39 8a 4d

                                 28 c9 31 17

 

After sub_bytes :                2d 3f 09 5b

                                 fb 6d 33 36

                                 02 12 7e e3

                                 34 dd c7 f0

 

After shift_rows :               2d 3f 09 5b

                                 6d 33 36 fb

                                 7e e3 02 12

                                 f0 34 dd c7

 

After mix_columns :              63 fc 97 75

                                 85 53 be 47

                                 b7 8d 47 d6

                                 9f f9 8e 91

 

Round key :                      47 95 f9 fd

                                 f7 35 6c 05

                                 f7 3e 32 8d

                                 bc 03 bc fd

 

State at start of round 5 :      24 69 6e 88

                                 72 66 d2 42

                                 40 b3 75 5b

                                 23 fa 32 6c

 

After sub_bytes :                36 f9 9f c4

                                 40 33 b5 2c

                                 09 6d 9d 39

                                 26 2d 23 50

 

After shift_rows :               36 f9 9f c4

                                 33 b5 2c 40

                                 9d 39 09 6d

                                 50 26 2d 23

 

After mix_columns :              f4 32 75 1d

                                 bc e5 f1 d0

                                 d4 54 d6 3b

                                 54 d0 c5 3c

 

Round key :                      3c a9 50 ad

                                 aa 9f f3 f6

                                 a3 9d af 22

                                 e8 eb 57 aa

 

State at start of round 6 :      c8 9b 25 b0

                                 16 7a 02 26

                                 77 c9 79 19

                                 bc 3b 92 96

 

After sub_bytes :                e8 14 3f e7

                                 47 da 77 f7

                                 f5 dd b6 d4

                                 65 e2 4f 90

 

After shift_rows :               e8 14 3f e7

                                 da 77 f7 47

                                 b6 d4 f5 dd

                                 90 65 e2 4f

 

After mix_columns :              98 00 6b 8e

                                 16 f8 2c 5a

                                 ee 7f 04 d0

                                 74 55 9c 36

 

Round key :                      5e f7 a7 0a

                                 39 a6 55 a3

                                 0f 92 3d 1f

                                 7d 96 c1 6b

 

State at start of round 7 :      c6 f7 cc 84

                                 2f 5e 79 f9

                                 e1 ed 39 cf

                                 09 c3 5d 5d

 

After sub_bytes :                b4 68 4b 5f

                                 15 58 b6 99

                                 f8 55 12 8a

                                 01 2e 4c 4c

 

After shift_rows :               b4 68 4b 5f

                                 58 b6 99 15

                                 12 8a f8 55

                                 4c 01 2e 4c

 

After mix_columns :              c5 9a f0 98

                                 7e 9b 5f c6

                                 1c d2 4b 34

                                 15 86 e0 39

 

Round key :                      14 e3 44 4e

                                 f9 5f 0a a9

                                 70 e2 df c0

                                 1a 8c 4d 26

 

State at start of round 8 :      d1 79 b4 d6

                                 87 c4 55 6f

                                 6c 30 94 f4

                                 0f 0a ad 1f

 

After sub_bytes :                3e b6 8d f6

                                 17 1c fc a8

                                 50 04 22 bf

                                 76 67 95 c0

 

After shift_rows :               3e b6 8d f6

                                 1c fc a8 17

                                 22 bf 50 04

                                 c0 76 67 95

 

After mix_columns :              ba a1 d5 5f

                                 a0 f9 51 41

                                 3d b5 2c 4d

                                 e7 6e ba 23

 

Round key :                      47 a4 e0 ae

                                 43 1c 16 bf

                                 87 65 ba 7a

                                 35 b9 f4 d2

 

State at start of round 9 :      fd 05 35 f1

                                 e3 e5 47 fe

                                 ba d0 96 37

                                 d2 d7 4e f1

 

After sub_bytes :                54 6b 96 a1

                                 11 d9 a0 bb

                                 f4 70 90 9a

                                 b5 0e 2f a1

 

After shift_rows :               54 6b 96 a1

                                 d9 a0 bb 11

                                 90 9a f4 70

                                 a1 b5 0e 2f

 

After mix_columns :              e9 02 1b 35

                                 f7 30 f2 3c

                                 4e 20 cc 21

                                 ec f6 f2 c7

 

Round key :                      54 f0 10 be

                                 99 85 93 2c

                                 32 57 ed 97

                                 d1 68 9c 4e

 

State at start of final round :  bd f2 0b 8b

                                 6e b5 61 10

                                 7c 77 21 b6

                                 3d 9e 6e 89

 

After sub_bytes :                7a 89 2b 3d

                                 9f d5 ef ca

                                 10 f5 fd 4e

                                 27 0b 9f a7

 

After shift_rows :               7a 89 2b 3d

                                 d5 ef ca 9f

                                 fd 4e 10 f5

                                 a7 27 0b 9f

 

Round key :                      13 e3 f3 4d

                                 11 94 07 2b

                                 1d 4a a7 30

                                 7f 17 8b c5

 

Final state :                    69 6a d8 70

                                 c4 7b cd b4

                                 e0 04 b7 c5

                                 d8 30 80 5a

 

 


  •                                          *

  •       I N V E R S E   C I P H E R        *

  •                                          *


 

Initial state :                  69 6a d8 70

                                 c4 7b cd b4

                                 e0 04 b7 c5

                                 d8 30 80 5a

 

Initial round key :              13 e3 f3 4d

                                 11 94 07 2b

                                 1d 4a a7 30

                                 7f 17 8b c5

 

State at start of round 9 :      7a 89 2b 3d

                                 d5 ef ca 9f

                                 fd 4e 10 f5

                                 a7 27 0b 9f

 

After inv_shift_rows :           7a 89 2b 3d

                                 9f d5 ef ca

                                 10 f5 fd 4e

                                 27 0b 9f a7

 

After inv_sub_bytes :            bd f2 0b 8b

                                 6e b5 61 10

                                 7c 77 21 b6

                                 3d 9e 6e 89

 

Round key :                      54 f0 10 be

                                 99 85 93 2c

                                 32 57 ed 97

                                 d1 68 9c 4e

 

After add_round_key :            e9 02 1b 35

                                 f7 30 f2 3c

                                 4e 20 cc 21

                                 ec f6 f2 c7

 

State at start of round 8 :      54 6b 96 a1

                                 d9 a0 bb 11

                                 90 9a f4 70

                                 a1 b5 0e 2f

 

After inv_shift_rows :           54 6b 96 a1

                                 11 d9 a0 bb

                                 f4 70 90 9a

                                 b5 0e 2f a1

 

After inv_sub_bytes :            fd 05 35 f1

                                 e3 e5 47 fe

                                 ba d0 96 37

                                 d2 d7 4e f1

 

Round key :                      47 a4 e0 ae

                                 43 1c 16 bf

                                 87 65 ba 7a

                                 35 b9 f4 d2

 

After add_round_key :            ba a1 d5 5f

                                 a0 f9 51 41

                                 3d b5 2c 4d

                                 e7 6e ba 23

 

State at start of round 7 :      3e b6 8d f6

                                 1c fc a8 17

                                 22 bf 50 04

                                 c0 76 67 95

 

After inv_shift_rows :           3e b6 8d f6

                                 17 1c fc a8

                                 50 04 22 bf

                                 76 67 95 c0

 

After inv_sub_bytes :            d1 79 b4 d6

                                 87 c4 55 6f

                                 6c 30 94 f4

                                 0f 0a ad 1f

 

Round key :                      14 e3 44 4e

                                 f9 5f 0a a9

                                 70 e2 df c0

                                 1a 8c 4d 26

 

After add_round_key :            c5 9a f0 98

                                 7e 9b 5f c6

                                 1c d2 4b 34

                                 15 86 e0 39

 

State at start of round 6 :      b4 68 4b 5f

                                 58 b6 99 15

                                 12 8a f8 55

                                 4c 01 2e 4c

 

After inv_shift_rows :           b4 68 4b 5f

                                 15 58 b6 99

                                 f8 55 12 8a

                                 01 2e 4c 4c

 

After inv_sub_bytes :            c6 f7 cc 84

                                 2f 5e 79 f9

                                 e1 ed 39 cf

                                 09 c3 5d 5d

 

Round key :                      5e f7 a7 0a

                                 39 a6 55 a3

                                 0f 92 3d 1f

                                 7d 96 c1 6b

 

After add_round_key :            98 00 6b 8e

                                 16 f8 2c 5a

                                 ee 7f 04 d0

                                 74 55 9c 36

 

State at start of round 5 :      e8 14 3f e7

                                 da 77 f7 47

                                 b6 d4 f5 dd

                                 90 65 e2 4f

 

After inv_shift_rows :           e8 14 3f e7

                                 47 da 77 f7

                                 f5 dd b6 d4

                                 65 e2 4f 90

 

After inv_sub_bytes :            c8 9b 25 b0

                                 16 7a 02 26

                                 77 c9 79 19

                                 bc 3b 92 96

 

Round key :                      3c a9 50 ad

                                 aa 9f f3 f6

                                 a3 9d af 22

                                 e8 eb 57 aa

 

After add_round_key :            f4 32 75 1d

                                 bc e5 f1 d0

                                 d4 54 d6 3b

                                 54 d0 c5 3c

 

State at start of round 4 :      36 f9 9f c4

                                 33 b5 2c 40

                                 9d 39 09 6d

                                 50 26 2d 23

 

After inv_shift_rows :           36 f9 9f c4

                                 40 33 b5 2c

                                 09 6d 9d 39

                                 26 2d 23 50

 

After inv_sub_bytes :            24 69 6e 88

                                 72 66 d2 42

                                 40 b3 75 5b

                                 23 fa 32 6c

 

Round key :                      47 95 f9 fd

                                 f7 35 6c 05

                                 f7 3e 32 8d

                                 bc 03 bc fd

 

After add_round_key :            63 fc 97 75

                                 85 53 be 47

                                 b7 8d 47 d6

                                 9f f9 8e 91

 

State at start of round 3 :      2d 3f 09 5b

                                 6d 33 36 fb

                                 7e e3 02 12

                                 f0 34 dd c7

 

After inv_shift_rows :           2d 3f 09 5b

                                 fb 6d 33 36

                                 02 12 7e e3

                                 34 dd c7 f0

 

After inv_sub_bytes :            fa 25 40 57

                                 63 b3 66 24

                                 6a 39 8a 4d

                                 28 c9 31 17

 

Round key :                      b6 d2 6c 04

                                 ff c2 59 69

                                 74 c9 0c bf

                                 4e bf bf 41

 

After add_round_key :            4c f7 2c 53

                                 9c 71 3f 4d

                                 1e f0 86 f2

                                 66 76 8e 56

 

State at start of round 2 :      3b fc 57 c0

                                 d9 74 67 59

                                 22 fb cb 0e

                                 68 73 e0 2d

 

After inv_shift_rows :           3b fc 57 c0

                                 59 d9 74 67

                                 cb 0e 22 fb

                                 73 e0 2d 68

 

After inv_sub_bytes :            49 55 da 1f

                                 15 e5 ca 0a

                                 59 d7 94 63

                                 8f a0 fa f7

 

Round key :                      b6 64 be 68

                                 92 3d 9b 30

                                 cf bd c5 b3

                                 0b f1 00 fe

 

After add_round_key :            ff 31 64 77

                                 87 d8 51 3a

                                 96 6a 51 d0

                                 84 51 fa 09

 

State at start of round 1 :      a7 97 d8 1f

                                 be ad c9 61

                                 1a 73 ca 8b

                                 69 9b 45 61

 

After inv_shift_rows :           a7 97 d8 1f

                                 61 be ad c9

                                 ca 8b 1a 73

                                 9b 45 61 69

 

After inv_sub_bytes :            89 85 2d cb

                                 d8 5a 18 12

                                 10 ce 43 8f

                                 e8 68 d8 e4

 

Round key :                      d6 d2 da d6

                                 aa af a6 ab

                                 74 72 78 76

                                 fd fa f1 fe

 

After add_round_key :            5f 57 f7 1d

                                 72 f5 be b9

                                 64 bc 3b f9

                                 15 92 29 1a

 

State at start of final round :  63 09 cd ba

                                 53 60 70 ca

                                 e0 e1 b7 d0

                                 8c 04 51 e7

 

After inv_shift_rows :           63 09 cd ba

                                 ca 53 60 70

                                 b7 d0 e0 e1

                                 04 51 e7 8c

 

After inv_sub_bytes :            00 40 80 c0

                                 10 50 90 d0

                                 20 60 a0 e0

                                 30 70 b0 f0

 

Round key :                      00 04 08 0c

                                 01 05 09 0d

                                 02 06 0a 0e

                                 03 07 0b 0f

 

Final state :                    00 44 88 cc

                                 11 55 99 dd

                                 22 66 aa ee

                                 33 77 bb ff

 

`

3.MATLAB核心程序 `clc;

clear;

close all;

warning off;

addpath(genpath(pwd));

 

 

% Initialization

[s_box, inv_s_box, w, poly_mat, inv_poly_mat] = aes_init;

 

 

plaintext_hex = {'00' '11' '22' '33' '44' '55' '66' '77' ...

                 '88' '99' 'aa' 'bb' 'cc' 'dd' 'ee' 'ff'};

 

plaintext = hex2dec (plaintext_hex);

 

 

ciphertext = cipher (plaintext, w, s_box, poly_mat, 1);

 

 

re_plaintext = inv_cipher (ciphertext, w, inv_s_box, inv_poly_mat, 1);

A119`