我的应用程序中有很多短字符串需要解密,解密速度非常关键。
目前我正在试验RNCryptor
,但发现其默认设置对我的用例来说有点慢。否则它是一个很棒的框架: - )
加密只会进行一次,因此其性能并不重要。
我很好地放弃了对速度的保护,因为我只想要有一个非常基本的加密。
为了实现最快的解密性能,您建议使用哪些RNCryptor
设置进行加密和解密?一个简短的代码样本会很棒!
同样,对于当前用例,我可以使用非常基本的加密保护。
答案 0 :(得分:7)
RNCryptor的大部分时间都在拨打PBKDF2。它迭代20,000次(每个键10,000次)。虽然在即将推出的RNCryptor版本中它可能会快一点,但基于密码的加密总是很慢。这是一个安全功能;它的目的很慢。它的设计速度慢,可以挫败攻击者,同时对最常见的用例产生可接受的影响。
您可以使用基于密钥的方法而不是基于密码的方法来显着提高性能。基于密钥的方法没有注入减速。如果可能的话,这将是我推荐的方法。生成两个随机的256位密钥而不是密码。
您可以将PBKDF2迭代次数设置为较小的数字(例如,在处理JavaScript时这是必要的),但是生成密钥的速度越快,安全性就越差。
有许多方法可以修改格式以提高用例的性能,但是很容易弄乱它并严重损害安全性。正如@Zaph所说,在修改任何安全框架之前,我要么做很多研究,要么聘请专家。
答案 1 :(得分:4)
你无能为力,RNCryptor
并不慢。
AES128将比AES256快一点 - 或者不依赖于平台。
设置成本很高,因此可以让事情变得更快。一种可能性是组合字符串。
如果您可以将所有字符串设置为块大小的倍数,则可以使用一个设置,ECB模式和部分CCryptor函数。注意,ECB模式将降低安全性,尤其是在短字符串上。使用CCCryptorCreate()
进行设置,并使用带有CCCryptorUpdate()
的短填充字符串进行解密。
要考虑的另一件事是TinyCrypt。 “TinyCrypt的第一点就是快速压缩和加密你的文件。”除了AES之外,我很少建议使用非主流的密码充其量只是狡猾 - 但是你说你愿意为了速度而权衡安全性。