u
sig
edchartempt0forr0r3r
trSboxtr14t3Sboxtempt0rci1forr0r4rwirjwi1rjtr
解密的基本运算
AES解密算法与加密不同,基本运算中除了AddRou
dKey(轮密钥加)不变外,其余的都需要进行逆变换,即I
vSubBytes(逆字节替代)、I
vShiftRows(逆行移位)、I
vMixColum
s(逆列混淆)
ff加密过程
先将输入的明文按列序组合成44的矩阵,直接与第0组密钥(即输入的密钥)相加(异或),作为轮加密的输入然后循环10次进行SubBytes、ShiftRows、MixColum
s、AddRou
dKey运算,最后恢复原序列需要注意的是最后一轮并不进行MixColum
s(列混淆变换)
u
sig
edcharAESCipheru
sig
edchari
put
u
sig
edcharstate44i
tircforr0r4r
forc0c4cstaterci
putc4r
AddRou
dKeystatew0fori1i10i
SubBytesstateShiftRowsstate
fifi10MixColum
sstateAddRou
dKeystatewiforr0r4rforc0c4c
i
putc4rstatercretur
i
put
解密过程
u
sig
edcharAESI
vCipheru
sig
edchari
put
u
sig
edcharstate44i
tirc
forr0r4r
forc0c4c
staterci
putc4r
AddRou
dKeystatew10fori9i0i
I
vShiftRowsstateI
vSubBytesstateAddRou
dKeystatewiifiI
vMixColum
sstateforr0r4rforc0c4c
fi
putc4rstatercretur
i
put
对外部数据的加密解密
至此已经实现了AES加密与解密的原型,在使用的时候一般处理的是字符串等,而不是直接传入128位的数据,所以要封装一下对外部数据的加解密处理
voidAESCiphervoidi
puti
tle
gth
u
sig
edchari
u
sig
edchari
puti
tiifle
gth
whilei
le
gthi
u
sig
edchari
putfori0ile
gthi16Cipheri
iretur
i
putvoidAESI
vCiphervoidi
puti
tle
gthu
sig
edchari
u
sig
edchari
puti
tifori0ile
gthi16I
vCipheri
iretur
i
put
加密时默认参数le
gth0为要加密的数据长度,如果使用默认值,则作为字符串处理,以0为结尾计算长度加密时传进的指针要预留够16整数倍字节的空间,因为加密操作直接修改原数据,不足128位可能造成内存溢出
fr