2017-02-18 129 views
2

我针对AES一些工作,我已经看到大量的伪代码的地方,例如,如果加密在10轮进行,解密是在9这主要一个做,确切的说:为什么AES解密比AES加密少一轮?

http://people.eku.edu/styere/Encrypt/JS-AES.html

这是正常的吗?有什么我失踪?它实际上是10轮解密,但我读错了代码?

+0

可能最好在[密码学](http://crypto.stackexchange.com)中提出,这个领域是关于编码的。 – zaph

+0

Stack Overflow是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[密码学堆栈交换](http://crypto.stackexchange.com/)或[信息安全堆栈交换](http://security.stackexchange.com/)将是一个更好的地方要问。 – jww

回答

4

真正的问题是人们为什么信任这些网站发布一些糟糕的JavaScript版本的密码。

这是官方NIST伪代码FIPS 197

Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)]) 
begin 
    byte state[4,Nb] 
    state = in 
    AddRoundKey(state, w[0, Nb-1]) 
    for round = 1 step 1 to Nr–1 
     SubBytes(state) 
     ShiftRows(state) 
     MixColumns(state) 
     AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) end for 
    SubBytes(state) 
    ShiftRows(state) 
    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) 
    out = state 
end 

InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)]) 
begin 
    byte state[4,Nb] 
    state = in 
    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) 
    for round = Nr-1 step -1 downto 1 
     InvShiftRows(state) 
     InvSubBytes(state) 
     AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) 
     InvMixColumns(state) end for 
    InvShiftRows(state) 
    InvSubBytes(state) 
    AddRoundKey(state, w[0, Nb-1]) 
    out = state 
end 

和Bang,走的是差异。您指向的网站在加密例程中犯了一个错误,taking it up to 11

在寻找代码时,测试矢量使用原始或原始文档及规格

+0

谢谢!也感谢您的提示! 我只是担心,如果AES中有一些隐藏的细节使得伪代码正确或者是什么,哈哈哈。 再次感谢! –