为什么AES解密比AES加密少一轮?
问题描述:
我针对AES一些工作,我已经看到大量的伪代码的地方,例如,如果加密在10轮进行,解密是在9这主要一个做,确切的说:为什么AES解密比AES加密少一轮?
http://people.eku.edu/styere/Encrypt/JS-AES.html
这是正常的吗?有什么我失踪?它实际上是10轮解密,但我读错了代码?
答
真正的问题是人们为什么信任这些网站发布一些糟糕的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中有一些隐藏的细节使得伪代码正确或者是什么,哈哈哈。 再次感谢! –
可能最好在[密码学](http://crypto.stackexchange.com)中提出,这个领域是关于编码的。 – zaph
Stack Overflow是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://*.com/help/on-topic)。也许[密码学堆栈交换](http://crypto.stackexchange.com/)或[信息安全堆栈交换](http://security.stackexchange.com/)将是一个更好的地方要问。 – jww