理论部分参考了下面这篇博客,本文不再解释各类变量及流程
AES加密算法的详细介绍与实现_TimeShatter的博客-优快云博客_aes
只是给报告存下档,不建议阅读以下内容。
明文密文分组为128bit
对密钥和iv的填充为补0
明文填充方式为PKCS5Padding
E_k为
图中的 last为 iv 或者上一组加密所产生的密文
last 为 iv或上一组加密的密文
code.py
import numpy as np
from functools import reduce
import base64
def multiply(a,b):
if b==0x01:
c=a
elif b==0x02:
c=a<<1;
elif b==0x03:
c=(a<<1)^a
elif b==0x09:
c=(a<<3)^a
elif b==0x0b:
c=(a<<3)^(a<<1)^a
elif b==0x0d:
c=(a<<3)^(a<<2)^a
elif b==0x0e:
c=(a<<3)^(a<<2)^(a<<1)
else:
print('error')
if c&0x0400:
c=(c&0x03ff)^0b01101100
if c&0x0200:
c=(c&0x01ff)^0b00110110
if c&0x0100:
c=(c&0xff)^0b00011011
return c
def ByteSubstitution(A,Sbo