我在構建一個Monotouch應用程序,該應用程序使用AES加密從服務器下載數據。然後我需要在文件被訪問時解密這些數據。使用MonoTouch進行AES加密
什麼是這樣使用MonoTouch的最好方法是什麼? iOS AES解密是apparently hardware accelerated,所以我最好喜歡調用CCCrypt。對於MonoTouch,我有一點n00b,所以有人知道如何做到這一點?
或者替代地存在於MonoTouch的做AES解密更好的方法?
我在構建一個Monotouch應用程序,該應用程序使用AES加密從服務器下載數據。然後我需要在文件被訪問時解密這些數據。使用MonoTouch進行AES加密
什麼是這樣使用MonoTouch的最好方法是什麼? iOS AES解密是apparently hardware accelerated,所以我最好喜歡調用CCCrypt。對於MonoTouch,我有一點n00b,所以有人知道如何做到這一點?
或者替代地存在於MonoTouch的做AES解密更好的方法?
MonoTouch的提供AES支撐內它的類庫,例如類RijndaelManaged。
但是你需要知道一點關於它如何被加密(加密模式,填充模式,密鑰大小),能夠對文件進行解密。還取決於文件大小,如果文件很小或者臨時文件(如果很大),則可能需要在內存中解密(更安全)。
注:
Rijndael算法是得到了選擇的是AES算法的原始名稱;
AES是Rijndael的一個子集(只有一個塊大小,128位),因此您可以使用RijndaelManaged
執行AES支持的所有操作;
目前MonoTouch沒有使用CommonCrypto(它使用Mono的託管實現),所以你不會得到硬件加速。這在未來的版本中可能會發生變化(並且對於在其應用程序中使用RijndaelManaged
的用戶將是兼容的,即簡單地重新編譯)。
EDIT
MonoTouch 5.3.3(阿爾法)現在默認使用CommonCrypto實現,包括硬件加速(當可用時),用於AES和SHA1。
如果您有興趣在MonoTouch下加密數據(即數據庫),SQLCipher可能是一個不錯的選擇(http://sqlcipher.net)。 SQLCipher的MonoTouch提供程序使用AES-256提供SQLite完整數據庫加密(http://sqlcipher.net/sqlcipher-for-monotouch)。還有一個適用於Android的Mono伴侶庫,它爲Android提供相同的API和功能(http://sqlcipher.net/sqlcipher-on-mono-for-android)
披露:我爲Zetetic,SQLCipher的作者工作。
太棒了,謝謝! – 2012-03-22 18:38:07
我不知道hw加速和託管實現之間的區別,但是當前的CPU速度足以使非加速方法非常快速。 Intel CPU的AES加速器,例如僅比C++中的快速軟件實現快兩倍。任何I/O,那將是瓶頸。 – 2012-03-22 21:17:38
@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