使用MonoTouch进行AES加密

4
我正在构建一个Monotouch应用程序,该应用程序使用AES加密从服务器下载数据。当访问文件时,我需要解密这些数据。
在MonoTouch中,最佳的方法是什么?iOS AES解密显然是硬件加速的,因此我理想情况下希望调用CCCrypt。由于我对MonoTouch有点陌生,所以是否有人知道如何做到这一点?
或者,有没有更好的方法在MonoTouch中进行AES解密?
2个回答

6
MonoTouch提供了在其类库中的AES支持,例如RijndaelManaged类。但是,您需要更多地了解它是如何加密的(密码模式、填充模式、密钥大小),才能解密文件。另外,根据文件大小,如果文件很小,则最好将其解密到内存中(更安全),如果文件很大,则解密到临时文件中。
注:
- Rijndael是被选为AES的算法的原始名称; - AES是Rijndael的子集(仅一个块大小,128位),因此您可以使用RijndaelManaged来执行AES支持的所有操作; - 目前MonoTouch不使用CommonCrypto(而是使用来自Mono的托管实现),因此您将无法获得硬件加速。这在未来的发布版本中可能会改变(对于在其应用程序中使用RijndaelManaged的人来说,这将是兼容的,即只需重新编译)。
编辑: MonoTouch 5.3.3(alpha)现在默认使用CommonCrypto实现,包括AES和SHA1的硬件加速(如果可用)。

1
我不知道硬件加速和托管实现之间的区别,但当前的CPU足够快,使非加速方法相当迅速。例如,Intel CPU的AES加速器仅比C ++中的快速软件实现快两倍。任何I/O都将成为瓶颈。 - Maarten Bodewes
@owlstead 区别在小型设备上通常更大(不仅更快,而且卸载主CPU),但我同意I/O通常隐藏了速度提升。我曾在这里(http://spouliot.wordpress.com/2012/02/27/cryptodev-support-in-crimson/)写过一篇关于一个不同的ARM设备使用`/dev/crypto`的博客,最大的胜利是使用大块(即避免调用和转换)。 - poupou
是的,大约快三倍,这符合我对ARM设备的期望。卸载可能是最大的优势,虽然内存开销将是相同的,当然只有当CPU有其他重要任务要执行时,卸载才起作用。 - Maarten Bodewes

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接