前面一篇文章咱們講到了DES算法。鑑於DES能夠被破解和加密效率不高的缺陷。美國的NIST(National Institute of Standards and Technology,國家標準技術研究所)在2000年經過選拔,從多個候選算法中確認了Rijndael算法爲最新的AES算法,成爲聯邦信息處理標準(FIPS)。算法
Rijndael是由比利時密碼學家Joan Daemen和Vincent Rijmen設計的分組密碼算法。它在2000年被當選爲AES算法。加密
注意,雖然AES是一種密碼強度很高的對稱密碼算法,可是若是須要商用的話要向NIST支付受權費用。
跟DES同樣,Rijndael也是由多輪運算組成的。其中每一輪都包括:SubBytes,ShiftRows,MixColumns和AddRoundKey這四個步驟。spa
下面咱們分別來說一下各個步驟的做用。設計
SubBytesblog
在AES的規範中,Rijindael的分組長度固定爲128bits,密鑰長度有128,192和256bits三種。教程
128bits就是16字節。一個字節能夠表示0-255的任意值。而SubBytes就是根據其值在一個擁有256個值的替換表中查找出對應的值進行處理。rem
爲了便於理解,你們能夠將其當作是簡單的替換。get
ShiftRows博客
SubBytes 以後,咱們就能夠進行shiftRows的操做了。it
因爲咱們的源字節是16bytes,能夠將其當作4*4 的一個矩陣。
ShiftRows就是將一行4字節按照必定的規則向左平移,如今有4行,每一行的平移字節數是不一樣的。
MixColumns
ShiftRows以後就是MixColumns,MixColumns是在4字節的列上面進行必定的運算,將其變爲另外的4字節列。
AddRoundKey
最後將生產的字節和密鑰進行XOR運算,最後生產結果。一般須要重複進行10-14輪運算。
更多教程請參考 flydean的博客