2012-03-22 58 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

相关问题