2013-07-08 90 views
0

我已經編譯了一些來自site的AES實現代碼,它應該執行128位密鑰加密。我測試了可以一起工作的加密/解密程序。但是如果我用上面的代碼加密任何東西,然後嘗試通過linux內置的openssl工具來解密它,我就不能解密它,它甚至會記錄我的不好的幻數錯誤。同樣,如果我使用openssl加密任何內容並嘗試使用代碼進行解密將無法工作。我試着用cbc ecb。不兼容的AES實現?

如果他們都在實施AES,不應該以相同的方式工作嗎?

+0

有太多的信息無法確定。 AES有不同的模式,例如CBC或CFB,填充(null,PKCS7等)的類型以及數據傳入。密鑰和初始化向量是否相同?發佈相關代碼並顯示您如何使用OpenSSL應該有助於診斷。 – vcsjones

+1

好吧,你是對的,我會做一些編輯... – diegoaguilar

+0

到目前爲止,我在這裏給更多的信息:http://stackoverflow.com/questions/17517156/different-encrypted-outputs-in-aes-實現?rq = 1 – diegoaguilar

回答

1

它看起來像C代碼使用ECB並且沒有填充。所以試着加密一個16字節的消息(多個),接着16個字節的值16(pkcs#7填充)。或者使用16字節的消息(多個)和 - openssl中的--nopad(更可能工作)。也可以使用aes-128-ecb或其他名稱。

分組密碼在文本的「塊」上工作 - 在這種情況下,它的長度爲16個字符。所以如果你不想擔心填充,你需要給出確切數量的塊。

另外,ecb模式(依次執行每個塊並且沒有額外的處理)對於許多用途並不安全。請參閱wikipedia文章(查看企鵝照片)。

[編輯:] [編輯2:]

> echo -n "abcdabcdabcdabcd" > msg 
> wc msg 
0 1 16 msg 
> openssl enc -aes-128-ecb -nopad -in msg -K 0 -S "" -iv "" 
[noise] 
> openssl enc -aes-128-ecb -nopad -in msg -K 0 -S "" -iv "" | wc 
0 1 16 

嘗試自己上面,看看其他代碼對它進行解密(編輯2套鑰匙明確,並刪除IV和鹽 - 不知道是什麼後兩個是在這種情況下)。

[編輯3:]

據我所知道的,問題是關係到方式,密碼被轉換爲關鍵。 openssl似乎在做額外的事情,我無法擺脫,除非我指定一個鍵爲十六進制(-K 0)。如果我這樣做,其他程序不起作用(需要密碼)。

對不起,我沒有想法。

+0

對不起,如果它是愚蠢的問,我怎樣才能做16個字節的消息和16個字節的值16的倍數? – diegoaguilar

+0

用'openssl aes-128-ecb -nopad -in msg -out output'嘗試並得到:壞解密 139963007211200:錯誤:0607F08A:數字包絡例程:EVP_EncryptFinal_ex:數據不是塊長度的倍數:evp_enc.c:414: – diegoaguilar

+0

味精必須完全是16個字符。例如(不包括引號和不返回)「abcdabcdabcdabcd」 –