使用openssl解析加密文件

时间:2014-04-21 22:06:01

标签: c++ encryption openssl

我用openssl加密了一个文件,现在我想读取加密文件(实际解析该文件)而不解密它。基本上我想看看加密文件是否包含某个单词。我怎样才能做到这一点?我搜索了不同的博客和帖子,我能想出的唯一解决方案是解密文件(创建一个新的READABLE文件),搜索解密文件中的单词,然后将其删除。由于我不喜欢创建文件的解密副本然后删除它,有没有办法解析/读取文件而不解密它?我应该提一下我使用的是c ++,但我认为这不重要,我是否正确? 提前感谢您提供的所有帮助。

2 个答案:

答案 0 :(得分:1)

无法解析加密的文件(至少如果你使用的是合理的,而不是简单易碎的 - 除了Ceasar密码或XOR密码之外的所有内容都算作“在这种情况下并非简单易碎”) 。

换句话说,您需要找到一种解密内容的方法 - 一种解决方案当然是解密到内存,或stdout并使用管道从文件中读取。

一个例子(这里写的一般概念,确切的代码可能需要一些调整):

FILE* p = popen("openssl des3 -d -in myfile.encrypted", "r"); 
int ch;
while((ch = fgetc(p)) != EOF)
{
   ... process a character at a time ... 
}
pclose(p);

答案 1 :(得分:0)

  

我用openssl加密了一个文件,现在我想读取加密文件(实际解析该文件)而不解密它...看看加密文件是否包含某个单词。

要保持语义安全性,您需要使用同态加密方案。 OpenSSL不支持这些密码系统,因此使用OpenSSL可能无法实现。

如果您不关心语义安全性,那么您可以使用任意数量的方案。 Mats给了你几个。但它们会像筛子那样泄漏信息,并且可能很容易打破频率分析等简单技术。

您可能想要阅读完全同态加密和一些同态加密方案。如果方案是在格上构建的,那么NTRU库可能会提供该方案或有用的原语。 Shoup的NTL library也可能提供方案或原语。 (我不知道因为我不使用FHE或SHE方案。)

您还应该与security.stackexchange.com或crypto.stackexchange.com上的人交谈。