从加密的文本文件中检索数据?

时间:2010-12-23 03:44:14

标签: delphi encryption

假设我有一个包含我数据的文本文件。

data :
ab
bc
de

-

encrypted data on text file :
ba
cb
ed

我想从文本文件中找到bc,所以我必须使用以下代码解密文本文件:

SL:=TStringList.create;
SL.LoadFromFile(textfile)

SLtemp:=TStringList.create;

for I := 0 to SL.Count - 1 do
SLtemp.Add(ReverseString(SL[i])); //decrypt

SL.Free;

for I := 0 to SLtemp.Count - 1 do
if SLtemp[i] = 'bc' then
begin
showmessage('found');
break;
end;
SLtemp.Free;

我认为我的方式是浪费资源。我必须将整个文件加载到内存并解密它们。我需要一些建议来快速找到加密文本中的特定行。

感谢。

3 个答案:

答案 0 :(得分:6)

听起来你正在尝试实现某种类型的数据库。 SQLite具有索引的透明加密支持。相信我,除非你把man- 放进去,否则你的数据库会很糟糕。

要真正解决问题,您必须通过解密每一行并为其编制索引来构建(加密)索引。如果您在处理数据并考虑到性能时,您应该非常熟悉索引策略。

但首先要问问自己,数据是否足够大,甚至不重要?如果它在十分之一秒内运行,那么它在百分之一的运行是毫无意义的。如果花了一个星期的时间,这表明你无论如何都无法走上错误的轨道,小的优化也无济于事。

很抱歉,如果这有点苛刻,特别是来自实施了几个自制数据库的人。

答案 1 :(得分:2)

除非您故意将要搜索的每个元素的加密块分开(这是一个非常可行的选项),否则每次(平均)必须至少解密一半文件。

您可以逐行加密(就像我说的那样,完全可能),加密搜索文本,然后只需找到匹配的行。

否则,您必须解密文件并搜索解密过程的输出以搜索字符串。如果您可以在加密仍在进行时搜索输出,则可以在找到文本时提前停止解密。

我喜欢SilverbackNet的加密数据库创意,我同意你不应该自己推出。您可能还需要确保索引也是加密的,如果数据库没有为您处理该细节(它应该)

答案 2 :(得分:1)

如果您的加密过程是一次一行。为什么不将关键字“bc”加密为“cb”,然后查找它? (不解密整个文件)