我在构建一个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