2017-02-18 127 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中有一些隱藏的細節使得僞代碼正確或者是什麼,哈哈哈。 再次感謝! –