对称密码体系
symmetry
DES
流程

1️⃣初始置换
2️⃣ feistel 结构
F函数

- 扩展/置换
32-->48 - $R_i \ xor\ K_i $
48 - S盒
48-->32 - 置换
32 - \(R_i\ = \ L_{i-1}\ xor\ t_i\)
密钥生成
- 56比特密钥 置换选择1
- 28位,分成两组,左循环移位 结果向下和向左传递
- 置换选择2
58-->48
3️⃣逆初始置换
python 实现
import pyDes
#密钥
DES = pyDes.des(deskey)
#加密模式
DES.setMode('ECB')
#每轮的子密钥,优先级高于deskey
DES.Kn = [
[1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0],
...
]
#加密
DES.encrypt(flag)
AES
特点
-
明文分组长度为
128 -
密钥长度可为
128,192,256
加密
1️⃣ 初始密钥加
密钥扩展,State初始化为MAddRoundKey: State与密钥异或
2️⃣ 轮函数(N-1 轮迭代)
-
SubBytes: S盒替换 -
ShiftRows: 行移位 -
MixColumns: 列混合变换 -
AddRoundKey: 与对应密钥异或
3️⃣ 结尾轮
SubBytes: S盒替换ShiftRows: 行移位AddRoundKey: 与对应密钥异或
伪代码


解密
伪代码

python 实现
from Crypto.Cipher import AES
#AES.new(key, mode, *args, **kwargs)
#加密
aes=AES.new(key,AES.MODE_CBC,iv)
enc_flag = aes.encrypt(flag)
#解密
flag = aes.decrypt(enc_flag)

DES,AES
浙公网安备 33010602011771号