delphi - 基于 key 的简单文本文件加密

标签 delphi delphi-7 delphi-2010

我正在尝试实现一种简单的文本文件加密技术,并且我正在使用以下代码来实现此目的。代码不是我写的,我只是用谷歌搜索得到的。加密技术看起来非常简单、简洁且易于实现。我发现它只有一个函数可以动态进行加密和解密。只要传递 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/

相关文章:

delphi - 中继邮件时可以将服务器 SSL 证书附加到 TIdSMTPRelay 组件吗

macos - 在MacOS上打开INI文件时出现Unicode映射错误

Delphi XE3,丑陋的StringGrid的边框

delphi - 如何更改 tcxgrid 行的颜色

delphi - 构建多线程 TCP/IP 服务器

delphi - Delphi中有高效的全词搜索功能吗?

windows - 哪些错误/异常会触发 Windows 错误报告?

delphi - 如何在所有dfm文件上设置文本dfm值以进行检查/.dfm二进制文件中的行数

delphi - 如何在发布版本中编译依赖于仅调试代码的assert()?

Delphi 2010 OXMLDOM