2010-08-09 121 views
6

我將簡要講述一個長話短說。我想實現我自己的AES加密/解密程序已經有一段時間了。加密程序進行得很順利,加密沒有任何錯誤或奇怪的輸出(因爲我已經比較了我的程序輸出和工作廣告,結果相同)。AES解密算法

維基百科是我在這個實現中的指導,在這個實現中,我讀了「使用相同的加密密鑰應用一組反向輪將密文轉換回原始明文。」

有幾個是我實現的模塊:

  1. 添加輪密鑰
  2. 移行
  3. 子字節
  4. 混合列

我還實施了幾個反向執行以上模塊:

  1. 反方向移位行
  2. 反向子字節
  3. 反向混合列

注:我並沒有實現反向輪密鑰,因爲,這是XOR荷蘭國際集團與加密密鑰的明文和XOR的逆轉是XOR本身(糾正我,如果我錯了)

所以,我的推杆以相反的順序,我沒有這個加密模塊,但從來沒有我得到了我的純文本回:

expandkey128(key); 
rev_subbytes(data); 
rev_shiftrows(data); 
addroundkey(data,key,10); 

for(int i = 9; i>= 1; i--) { 
    rev_subbytes(data); 
    rev_shiftrows(data); 
    rev_mixColum(data); 
    addroundkey(data,key,i); 
} 

addroundkey(data,key,0); 

// Please note that I also did from 0 to 10 , 
// instead of 10 to 0 and didn't workout 

而且我也想過,也許我不應該實現模塊的反向模型,也許我必須使用那些我加密過的模塊,只能以相反的順序;猜猜看是什麼?沒有工作! :

expandkey128(key); 
addroundkey(data,key,0); 

for(int i = 1; i<= 9; i++) { 
    subbytes(data); 
    shiftrows(data); 
    mixColum(data); 
    addroundkey(data,key,i); 
} 

subbytes(data); 
shiftrows(data); 
addroundkey(data,key,10); 

所以這裏是問題:什麼是錯的? ||如果你願意,應用這些所謂的模塊或函數的正確順序是什麼?

+1

您是否正確計算了您的S盒,導致您無法使用您用於加密的同一盒子。 http://en.wikipedia.org/wiki/S-box 維基百科英文版本中缺少此評論。直接看看這個規範:http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf你已經計算了要解密的反向S盒。 – evildead 2010-08-09 01:43:05

+0

實際上在rev_subbytes上我有Rijndael的反向S盒 – 2010-08-09 01:46:15

+1

有一個很棒的工具:http://www.cryptool.de/在這裏你可以手動進行任何轉換。也許你必須調試每一步,也許該工具將幫助你驗證每一步。 – evildead 2010-08-09 01:49:06

回答

7

您的操作順序看起來不對。我想你想要的是:

expandkey128(key); 

addroundkey(data,key,10); 
rev_shiftrows(data); 
rev_subbytes(data); 

for(int i = 9; i>= 1; i--) { 
    addroundkey(data,key,i); 
    rev_mixColumn(data); 
    rev_shiftrows(data); 
    rev_subbytes(data); 
} 

addroundkey(data,key,0); 

有關更多詳細信息,請參見my stick figure explanation of AES及其附帶的參考實現。

警告:如Act 3, Scene 2there be dragons編寫自己的AES實現生產使用提及。

+0

我不會爲aes使用自己的實現。尼斯協議;) – evildead 2010-08-09 01:56:40

+0

好吧,我不打算在任何地方使用它,只是爲了好玩! 我試過了你的訂單沒有工作,我也檢查了鏈接(http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf),說不同的訂單 – 2010-08-09 02:04:41

+1

它適用於我的機器並在我的執行:)。如果您有一些時間,請下載我的C#實現並逐步完成,並將每一步與您的實現進行比較。請注意,我給出的順序與圖12中的順序完全相同。我只是按照我給出的順序來更改它,以便清楚地表明它正在顛倒一切。我花了一些試驗來比較我的輸出結果和Rijndael書籍的全部輸出結果,以確保我擁有正確的東西。你可能只是在你的一個反函數中有一個小錯誤。我建議在每一輪慢慢進行下一步。 – 2010-08-09 02:17:49