Я не уверен, что вы имеете в виду, когда говорите "шифруется только часть строки". Ты имеешь в виду, что некоторые тексты все еще можно увидеть в sTestToConvert
даже после вызова Encrypt
?
Скорее всего, я ожидаю, что вы имеете в виду, что когда вы звоните Decrypt
, вы получаете обратно только часть исходной строки.
Это потому, что Encrypt
может хранить любое байтовое значение в результате, включая непечатаемые символы, даже #0
, нулевой символ. Когда вы храните такую строку в TMemo
или 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;