AES加密算法详解

由于DES密钥长度太短,容易被暴力破解,所以诞生了AES算法,他们都是采用对称加密,最大的优点是加密速度快。AES同样采用分组加密的方法,下面看具体操作(以128位密钥,10轮循环为例)

目录

一.概述

二.初始变换

三.轮函数(字节代换,行移位,列混合,轮密钥加)


一.概述

1 将明文将输入的明文按字节分组为一个4 x 4的矩阵。同时,初始化密钥扩展,根据输入的密钥生成一系列轮密钥,用于后续的轮函数。

2 轮函数:对每一轮进行处理,包括字节替代、行移位、列混淆和轮密钥加。

3  最后一轮:去除列混淆操作,只进行字节替代、行移位和轮密钥加。

4 输出密文:将最后一轮处理的矩阵按列输出为密文。

e04700226f784de0ba67b2300610c7d2.jpeg

二.初始变换

AES将明文按16字节一组分组,最后不足16字节按规定方式进行补位(在解密时需要将其去掉)将分好组的明文构造为一个4*4的矩阵,与同样为4*4的密钥矩阵进行异或操作,完成初始变化,得到一个状态矩阵S0。

9fd64f2efa7f4c4d93f3ff7b9d96db52.jpeg

三.轮函数(字节代换,行移位,列混合,轮密钥加)

3.1 字节代换 SubBytes

将经过初始变换的状态矩阵S0按给定的S-BOX替代。

S盒:
   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76
10 CA 82 C9 7D FA 59 47 F0 AD D4 A2 AF 9C A4 72 C0
20 B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 15
30 04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 75
40 09 83 2C 1A 1B 6E 5A A0 52 3B D6 B3 29 E3 2F 84
50 53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF
60 D0 EF AA FB 43 4D 33 85 45 F9 02 7F 50 3C 9F A8
70 51 A3 40 8F 92 9D 38 F5 BC B6 DA 21 10 FF F3 D2
80 CD 0C 13 EC 5F 97 44 17 C4 A7 7E 3D 64 5D 19 73
90 60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DB
A0 E0 32 3A 0A 49 06 24 5C C2 D3 AC 62 91 95 E4 79
B0 E7 C8 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08
C0 BA 78 25 2E 1C A6 B4 C6 E8 DD 74 1F 4B BD 8B 8A
D0 70 3E B5 66 48 03 F6 0E 61 35 57 B9 86 C1 1D 9E
E0 E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DF
F0 8C A1 89 0D BF E6 42 68 41 99 2D 0F B0 54 BB 16

状态矩阵中,十六进制数第一位表行,第二位表列。如:2f (第二行第f列,查表知为89)

3.2 行移位 ShiftRows

移位规则:第一行左移0位;第二行左移1位;第三行左移2位;第四行左移3位。得到状态矩阵S1。

dbcfb02b21324f89b829fdc1bac1a4c1.jpeg

 3.3 列混合 MixColumns

首先将S1要左乘一个固定矩阵,但是并不按照矩阵乘法规则进行。该乘法与矩阵乘法的区别是,将矩阵乘法的“+”变为异或运算;乘法则根据以下规则进行

a7175849ba704f5c9f3934c57964d488.jpeg

乘完后得到4*4的状态矩阵S2。 

3.4 轮密钥加 AddRoundKey

将S2与每轮对应的子密钥进行异或运算。(子密钥的生成稍后讲解)

4.1由于密钥要参与10轮循环,每轮都用的不同的密钥,所有要将原始的128位,四组密钥进行扩展。

babbc1f8c596465fab69c2404b34c2c3.png

轮常量表:

Round 1: 01 00 00 00
Round 2: 02 00 00 00
Round 3: 04 00 00 00
Round 3: 08 00 00 00
Round 5: 10 00 00 00
Round 6: 20 00 00 00
Round 7: 40 00 00 00
Round 8: 80 00 00 00
Round 9: 1B 00 00 00
Round 10: 36 00 00 00

四.补充:

AES属于spn结构的分组加密与DES的feistel结构相比

1密钥长度更长,不易受穷举法攻击

2在软件和硬件上都有更高的效率

### Python 中 AES 加密算法的实现 为了在 Python 中实现 AES 加密算法,推荐使用 `pycryptodome` 库。此库不仅继承了 PyCrypto 的功能还进行了改进和扩展[^3]。 #### 安装 pycryptodome 首先需要安装 pycryptodome 库,可以通过 pip 工具轻松完成这一操作: ```bash pip install pycryptodome ``` #### 密码填充 由于 AES 是分组密码,它要求输入的数据长度必须是特定大小(通常是16字节)的整数倍。因此,在实际应用中通常会对不足部分进行填充处理。这里提供了一个简单的 PKCS7 填充方式的例子: ```python from Crypto.Util.Padding import pad, unpad BLOCK_SIZE = 16 # Bytes data = b'plain text' padded_data = pad(data, BLOCK_SIZE) print(padded_data) original_data = unpad(padded_data, BLOCK_SIZE) print(original_data.decode()) ``` #### 使用 AES 进行加解密 下面展示了一种基于 CBC 模式的 AES 加密与解密过程。需要注意的是,除了设置相同的秘钥外还需要指定初始化向量 IV 来增强安全性。 ```python from Crypto.Cipher import AES import base64 def encrypt(key, raw): key = bytes.fromhex(key) # Convert hex string to byte array cipher = AES.new(key, AES.MODE_CBC) ct_bytes = cipher.encrypt(pad(raw.encode(), AES.block_size)) iv = base64.b64encode(cipher.iv).decode('utf-8') ct = base64.b64encode(ct_bytes).decode('utf-8') return iv, ct def decrypt(key, enc_iv, enc_ct): key = bytes.fromhex(key) iv = base64.b64decode(enc_iv) ct = base64.b64decode(enc_ct) cipher = AES.new(key, AES.MODE_CBC, iv) pt = unpad(cipher.decrypt(ct), AES.block_size) return pt.decode() key_hex_str = '0f1571c947d9e8591cb7add6af7f6798' # Must be 16 (AES-128), 24 (AES-192), or 32 (AES-256) characters long. iv, ciphertext = encrypt(key_hex_str, "The quick brown fox jumps over the lazy dog") plaintext = decrypt(key_hex_str, iv, ciphertext) print(f"Ciphertext: {ciphertext}") print(f"Plaintext after decryption: {plaintext}") ``` 上述代码展示了如何创建一个 AES 对象,并通过给定的秘密钥匙执行加密和解密操作。此外,该例子还包括了必要的填充逻辑以及 Base64 编码/解码以方便传输或存储密文[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

客行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值