免责声明:密码学新手。
我有一个使用OpenSSL加密数据的外部过程,目前该过程使用了salt。
iPhone应用程序从服务器获取数据,将其下载到应用程序的documents目录,然后需要对其解密。 iPhone操作系统不包含OpenSSL库。您可以自己构建它,但这是困难而棘手的。多亏了Stackoverflow的帮助,我发现的“最简单”的解决方案是使用CommonCrypto/CommonCryptor.h
,它是安全框架的一部分。
但是,用于解密数据的C函数需要iv才能正确解密。
有没有一种方法可以从加密数据中导出iv(在我看来,这似乎会否定额外的安全性)?还是我需要首先以某种方式指定iv并让iPhone应用知道它是什么?或者,只是不使用盐?
Edit1:澄清一下,我正在使用OpenSSL加密数据文件中的文本。使用OpenSSL的脚本会加密文本,然后将其上传到Dropbox,然后应用程序会从Dropbox下载文件,进行解析,然后尝试解密文本。
Edit2:是的,我正在将OpenSSL命令行实用程序与-pass
选项一起使用。
最佳答案
应该为您加密的每条消息随机选择IV。我假设您使用的是OpenSSL命令行实用程序openssl enc
,但尚不清楚您是使用基于密码的加密(-pass
和-salt
选项)还是显式指定密钥(-K
和-IV
选项)。
为了获得最佳安全性,我建议您使用-K选项,并为每条消息随机生成一个新的IV。将IV和密文一起发送。例如,您可以将密文添加到一个文件中的IV中,然后在准备解密时从文件的开头剥离IV。
IV可以是公开的;您不必隐藏它。重要的是,您对每条消息都使用了不可预测的IV。
关于iphone - 如何从OpenSSL加密数据中获取初始化向量(iv),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7364819/