我正在尝试实现一种简单的文本文件加密技术,并且我正在使用以下代码来实现此目的。代码不是我写的,我只是用谷歌搜索得到的。加密技术看起来非常简单、简洁且易于实现。我发现它只有一个函数可以动态进行加密和解密。只要传递 key 就可以了。但是,我只是想知道,我是否可以检查用户传递的 key 是否正确。目前它只会根据传递的 key 加密/解密文本文件。但是没有机制来检查我们是否使用正确的 key 进行解密。无论我们传递什么 key ,它都会被解密,但不可读。知道如何解决这个问题..?
procedure TEnDeCrypt.EnDecryptFile(pathin, pathout: string; Chave: Word);
var
InMS, OutMS: TMemoryStream;
cnt: Integer;
C: byte;
begin
InMS := TMemoryStream.Create;
OutMS := TMemoryStream.Create;
try
InMS.LoadFromFile(pathin);
InMS.Position := 0;
for cnt := 0 to InMS.Size - 1 DO
begin
InMS.Read(C, 1);
C := (C xor not (ord(chave shr cnt)));
OutMS.Write(C, 1);
end;
OutMS.SaveToFile(pathout);
finally
InMS.Free;
OutMS.Free;
end;
end;
最佳答案
使用哈希算法对纯文本生成校验和并将其存储在加密文件的开头。
您可以通过散列解密的文本来验证 key 并确保校验和匹配。
如果您使用 SHA256 等强哈希算法来生成校验和,用户将很难自动进行暴力攻击,因为计算成本很高。
为了确保文件完好无损,您可能还希望在加密文件上存储校验和并将其也存储在文件头中。否则,将无法区分无效密码和截断的文件。
我通常使用Blowfish加密算法,Delphi 可以从多个来源获得该算法。 Blowfish 没有已知的弱点,并且相当紧凑且快速。
关于delphi - 基于 key 的简单文本文件加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9482352/