我將簡要講述一個長話短說。我想實現我自己的AES加密/解密程序已經有一段時間了。加密程序進行得很順利,加密沒有任何錯誤或奇怪的輸出(因爲我已經比較了我的程序輸出和工作廣告,結果相同)。AES解密算法
維基百科是我在這個實現中的指導,在這個實現中,我讀了「使用相同的加密密鑰應用一組反向輪將密文轉換回原始明文。」
有幾個是我實現的模塊:
- 添加輪密鑰
- 移行
- 子字節
- 混合列
我還實施了幾個反向執行以上模塊:
-
個
- 反方向移位行
- 反向子字節
- 反向混合列
注:我並沒有實現反向輪密鑰,因爲,這是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);
所以這裏是問題:什麼是錯的? ||如果你願意,應用這些所謂的模塊或函數的正確順序是什麼?
您是否正確計算了您的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
實際上在rev_subbytes上我有Rijndael的反向S盒 – 2010-08-09 01:46:15
有一個很棒的工具:http://www.cryptool.de/在這裏你可以手動進行任何轉換。也許你必須調試每一步,也許該工具將幫助你驗證每一步。 – evildead 2010-08-09 01:49:06