我正在尝试加密字符串,但通常只有部分字符串被加密.我没有看到其他人遇到这个问题,所以我可能做错了什么.我在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;
Run Code Online (Sandbox Code Playgroud)
尝试使用OldEncrypt和OldDecrypt时,我也遇到了同样的问题.关于导致问题的原因是什么?谢谢.
当你说"只有部分字符串被加密"时,我不确定你的意思.你的意思是说你sTestToConvert打电话后仍然可以看到一些明文Encrypt吗?
更有可能的是,我希望你的意思是,当你打电话时Decrypt,你只能获得原始字符串的一部分.
那是因为Encrypt可以在结果中存储任何字节值,包括非打印字符,甚至#0是空字符.将此类字符串存储在TMemoor中时TEdit,基础Windows控件将该#0字符视为字符串的结尾.它不存储其余的加密值.因此,当您调用Decrypt存储在编辑控件中的内容时,您只会解密您原来拥有的内容的一部分.
如果您想要加密数据的文本版本,请使用Encode和Decode函数; 在在线文档提到了这一点.那些使用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;
Run Code Online (Sandbox Code Playgroud)