2012-03-22 137 views
4

我在構建一個Monotouch應用程序,該應用程序使用AES加密從服務器下載數據。然後我需要在文件被訪問時解密這些數據。使用MonoTouch進行AES加密

什麼是這樣使用MonoTouch的最好方法是什麼? iOS AES解密是apparently hardware accelerated,所以我最好喜歡調用CCCrypt。對於MonoTouch,我有一點n00b,所以有人知道如何做到這一點?

或者替代地存在於MonoTouch的做AES解密更好的方法?

回答

6

MonoTouch的提供AES支撐內它的類庫,例如類RijndaelManaged

但是你需要知道一點關於它如何被加密(加密模式,填充模式,密鑰大小),能夠對文件進行解密。還取決於文件大小,如果文件很小或者臨時文件(如果很大),則可能需要在內存中解密(更安全)。

注:

  • Rijndael算法是得到了選擇的是AES算法的原始名稱;

  • AES是Rijndael的一個子集(只有一個塊大小,128位),因此您可以使用RijndaelManaged執行AES支持的所有操作;

  • 目前MonoTouch沒有使用CommonCrypto(它使用Mono的託管實現),所以你不會得到硬件加速。這在未來的版本中可能會發生變化(並且對於在其應用程序中使用RijndaelManaged的用戶將是兼容的,即簡單地重新編譯)。

EDIT

MonoTouch 5.3.3(阿爾法)現在默認使用CommonCrypto實現,包括硬件加速(當可用時),用於AES和SHA1。

+0

太棒了,謝謝! – 2012-03-22 18:38:07

+1

我不知道hw加速和託管實現之間的區別,但是當前的CPU速度足以使非加速方法非常快速。 Intel CPU的AES加速器,例如僅比C++中的快速軟件實現快兩倍。任何I/O,那將是瓶頸。 – 2012-03-22 21:17:38

+0

@owlstead在較小的設備上差別往往更大(它不僅速度更快,而且卸載了主CPU),但我同意I/O經常隱藏速度增加。我在這裏博文(另一個使用'/ dev/crypto'的ARM設備):http://spouliot.wordpress.com/2012/02/27/cryptodev-support-in-crimson/最大的勝利是使用大塊(即避免呼叫和轉換)。 – poupou 2012-03-22 21:23:25