2012-08-14 68 views
1

一位同事爲我提供了兩個使用GNUPG加密的文本文件,AES128/AES256不加鹽。iOS環境下的GNUPG解密

使用下面的示例中,https://stackoverflow.com/a/1400596/300972,我試圖在iOS應用程序解密這兩個文件中,一個使用AES256例如,第二通過修改ALGO到kCCAlgorithmAES128和密鑰長度來kCCKeySizeAES128。

將文件加載到NSData對象證明是成功的;我能夠輸出NSData。但是,在解密時,它們總是以kCCDecodeError(-4304)失敗。我認爲它可能是填充,所以我們嘗試了不同的變化,原來是kCCOptionPKCS7Padding,仍然是同樣的錯誤。我試着填充0,它提供了一個截斷的NSData對象,我無法創建NSString。 (UTF8編碼)。

有沒有人能夠在iOS環境下成功解密使用GNUPG加密的文件?你能向我們提供吸取的經驗教訓嗎?

+0

使用libgcrypt。武裝庫和製作文件。 http://code.google.com/p/ios-static-libraries/downloads/list – 2012-08-30 16:10:14

回答

3

GnuPG以OpenPGP文件格式(RFC-4880)寫入。這是一種相當複雜的格式,您甚至可以在開始解密數據之前解析它。 GnuPG還會在數據加密之前對其進行壓縮。它使用「OpenPGP的密碼反饋(CFB)模式」。雖然iOS 5支持CFB,但這與RFC-4880不太一樣。例如,他們不使用正常的IV,而是以一種新穎的方式進行同步,以提供與標準CFB不兼容的「快速檢查」。然後是他們的字符串到鍵(S2K)算法,它們與PBKDF2不一樣。

簡而言之,CommonCryptor是一系列將這件事情交給AES處理的最後一個步驟。您可以看看libgcrypt,但其LGPL許可證通常與iOS開發不兼容。您應該研究其他OpenPGP實現。我知道JavaScript中有一些(這很瘋狂,但是仍然可以在沒有創建許可頭痛的情況下工作)。也許Cryptlib(它有一個商業許可證)。

就我個人而言,如果可以的話,我會使用其他加密器。 OpenSSL雖然不是特別安全,但非常便於攜帶,並且與命令行應用程序一樣易於使用。 RNCryptor可以在iOS上進行讀寫。

+0

感謝您花時間回答。我們將重新思考我們的方法。 – 2012-08-15 13:52:44

+0

回到這個問題,看到你的個人資料。只是想說我喜歡這本書的iOS5編程,推動極限!我的辦公桌上有一個副本。再次感謝你的幫助! – 2012-08-30 19:14:50

+1

如果許可是一個問題,您可能需要查看[NetPGP](http://www.netpgp.com)。 – Draxillion 2013-01-06 06:45:49