2013-03-08 102 views
3

我目前正試圖在目標c中以aes-128 cfb8格式加密字符串。我到處尋找,但似乎無法找到一個工作解決方案。充氣城堡是一個理想的解決方案,但它只適用於java和c#。 openssl是最好的選擇嗎?我似乎無法找到任何使用openssl進行實際加密的詳細方法。請帶領我走向正確的方向。切換到另一個加密不是一種選擇。目標c中的Aes-128 cfb8加密

+0

您的問題與http://stackoverflow.com/questions/2774239/help-for-aes-128-bit-algorithm-i-want-to-encrypt-it和http://watchitlater.com/有關blog/2010/02/java-and-iphone-aes-interoperability/ – user1929959 2013-03-08 00:19:26

回答

1

CommonCryptor應該使用kCCModeCFB8支持CFB-8。詳細信息請參見man page for CCCrypt。這就是說,我總是警告人們要非常小心地用像CommonCryptor這樣的低級庫實現這種東西。錯誤地做到這一點非常容易。例如,您必須使用KDF從密碼中正確生成密鑰(您不能僅將密碼字節複製到密鑰數據中),並且IV必須是隨機的,否則CFB會失去一些安全性(更具體地說,您絕不能重複使用相同的鍵和IV)。

如果您不熟悉這些問題,請參閱Properly encrypting with AES with CommonCrypto和Mike Ash的Friday Q&A 2012-08-10: A Tour of CommonCrypto。您需要更換CFB-8的一件是用CCCryptorCreateWithMode的電話代替CCryptorCreate,並通過kCCModeCFB8

+0

Rob在評論中指出:kCCModeCFB8是一個CCMode(一個枚舉),而不是一個CCOptions(一個位域)。您無法使用kCCOptionPKCS7Padding進行或操作。 (如果可以,那麼PKCS7 Padding也會打開ECB模式,因爲它們都是1.)必須使用CCCryptorCreateWithMode()來設置模式。我不相信用CCCrypt()這樣的一次方便功能來設置模式。 – zaph 2013-11-04 13:47:32

0

我目前正在研究醫療單位的安全協議。我絕對相信openssl是加密數據的最佳方法。儘可能使用本機文件系統卸載工作並減少開發時間,而不會引入錯誤的代碼。話雖如此,我對Objective-C非常陌生。

  1. 使用你的objective-c程序來構建命令行。
  2. 使用您的objective-c程序將該命令行傳遞給shell。
  3. 讓shell處理您的加密。
  4. 接收shell和進程結果的openssl結果以確定是否發生錯誤。 @「」表示沒有錯誤。

祝你好運。對不起,我無法提供任何詳細的Objective-C代碼,本週我剛剛開始Objective-C,熟悉使用其他語言的所有代碼庫。但是每種語言都有一個shell界面,毫無疑問,這是您的最佳選擇。

+1

我認爲你正在描述openssl命令行加密?你爲什麼認爲這是最好的方法? OpenSSL'enc'命令沒有遵循任何真正的標準或最佳實踐。這並不可怕,但它肯定會好得多。有關其問題的一些討論,請參見http://security.stackexchange.com/a/23239/5304。 – 2013-10-25 21:26:21

+0

如果OP有興趣在iOS上這樣做,那麼由於不允許啓動新進程,因此使用命令行將不可能(不包括越獄)。對於OSX它將是可用的。 – Kitsune 2013-11-03 14:51:20