2016-05-27 237 views
0

我想了解更多關於AES如何通過實現在此鏈接上描述的算法http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf。我有兩種加密和解密方式,我知道我的加密是正確的,因爲在我用來測試代碼的鏈接中提供了一些示例。但是,我不確定如何測試我的解密算法是否正常工作。 我遇到的問題是我的AES實現不適用於16B輸入(它返回垃圾)。然而,它正在爲25KB的輸入工作。此外,它的工作原理是,它準確地加密和解密大部分文件,除了開頭的字節和文件末尾的字節。不幸的是,我目前沒有權限訪問整個代碼(如果需要,我可以記住所有代碼)以便在此處發佈。我希望看到有人會根據我的描述瞭解可能是什麼問題。我不完全理解除了開始和結束字節之外,文件是如何被解密的,因爲這應該是ECB模式,所以不應該把整個文件當作垃圾而不是開始和結束(因爲ECB接受一塊輸入和輸出相同大小的輸出塊)。AES-128加密/解密

+1

如果不是塊大小的倍數,是否填充輸入? – Buddy

+1

s/EBC/ECB /(電子代碼簿) –

+0

@AlanStokes註明並修復。 –

回答

0

聽起來好像你真的在使用CBC模式,而且iv是不一樣的,可能只是爲了iv而撿垃圾。請參閱CBC mode

最後的錯誤字節可能是一個填充問題。你如何處理要加密的輸入,其長度不是塊大小的倍數?

+0

雖然這是問題。我沒有使用IV,也沒有使用下一個明文輸入XOR我的密文。我確定我正在使用ECB,因爲我只是將輸入複製到狀態數組中,對其進行加密,將其轉換爲數組,然後重複該過程。沒有任何鏈接。 –

+0

你不提填充,你如何處理?你需要做的是獲得16字節,20字節和32字節的工作,這些都是簡單的情況。爲其他來源獲取參考良好加密並進行比較,是加密還是解密正確?選擇一個破碎的工作。將示例輸入和輸出添加到十六進制問題中。 – zaph

+0

啊,我的道歉。之所以我沒有提到填充,是因爲我知道知道ECB和CBC都需要填充,除非你試圖實現密碼竊取,但也有它自己的缺點,這是衆所周知的。我在我的代碼中實現了填充,並且通過將文件長度四捨五入到16的最大倍數(因爲我使用的AES的輸入塊大小爲16字節)。之後,我解密密文並只輸出到原始文件的未填充長度。 –