【问题标题】:Delphi - MadCrypt - Problem encrypting and decrypting a stringDelphi - MadCrypt - 加密和解密字符串的问题
【发布时间】:2009-05-22 14:34:50
【问题描述】:

我正在尝试加密一个字符串,但通常只有部分字符串被加密。我没有看到其他人有这个问题,所以我可能做错了什么。我在 Delphi 2007 和 2009 中遇到了同样的问题。我使用的是 Win XP SP3。代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
  sTestToConvert: ansistring;
  sPassword: ansistring;
begin
  sTestToConvert := trim(Memo1.Text);
  sPassword := trim(Edit1.Text);
  madCrypt.Encrypt(sTestToConvert, sPassword);
  Memo2.Text := sTestToConvert;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  sTextToConvert: ansistring;
  sPassword: ansistring;
begin
  sPassword := trim(Edit1.Text);
  sTextToConvert := trim(memo2.Text);
  madCrypt.Decrypt(sTextToConvert, sPassword);
  Memo1.Text := sTextToConvert;
end;

我在尝试使用 OldEncrypt 和 OldDecrypt 时也遇到了同样的问题。关于导致问题的任何想法?谢谢。

【问题讨论】:

    标签: delphi encryption


    【解决方案1】:

    当您说“只有部分字符串被加密”时,我不确定您的意思。你的意思是即使在调用Encrypt 之后,你仍然可以看到sTestToConvert 中的一些明文?

    更可能的是,我希望您的意思是,当您调用 Decrypt 时,您只会得到原始字符串的一部分。

    这是因为Encrypt 可能会在结果中存储任何 字节值,包括非打印字符,甚至#0,即空字符。当您将此类字符串存储在TMemoTEdit 中时,底层Windows 控件将#0 字符视为字符串的结尾。它不存储其余的加密值。因此,当您对存储在编辑控件中的内容调用 Decrypt 时,您只是在解密您最初拥有的内容的一部分。

    如果您想要加密数据的文本版本,请使用EncodeDecode 函数; documentation online 提到了这一点。那些使用 base-64 编码。

    procedure TForm1.Button1Click(Sender: TObject);
    var
      sTestToConvert: AnsiString;
      sPassword: AnsiString;
    begin
      sTestToConvert := Trim(Memo1.Text);
      sPassword := Trim(Edit1.Text);
      madCrypt.Encrypt(sTestToConvert, sPassword);
      Memo2.Text := madCryt.Encode(sTestToConvert);
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      sTextToConvert: AnsiString;
      sPassword: AnsiString;
    begin
      sPassword := Trim(Edit1.Text);
      sTextToConvert := madCrypt.Decode(Memo2.Text);
      madCrypt.Decrypt(sTextToConvert, sPassword);
      Memo1.Text := sTextToConvert;
    end;
    

    【讨论】:

    • 谢谢 Rob...这是问题所在,现在可以正常工作了。感谢您的帮助。
    猜你喜欢
    • 2020-08-04
    • 2018-04-16
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多