2009-05-22 8 views
1

Ich versuche eine Zeichenfolge zu verschlüsseln, aber oft wird nur ein Teil der Zeichenfolge verschlüsselt. Ich sehe niemanden, der dieses Problem hat, also mache ich wahrscheinlich etwas falsch. Ich habe das gleiche Problem in Delphi 2007 und 2009. Ich benutze Win XP SP3. Hier ist der Code:Delphi - MadCrypt - Problem beim Verschlüsseln und Entschlüsseln einer Zeichenfolge

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; 

ich auch das gleiche Problem haben, wenn sie versuchen OldEncrypt und OldDecrypt zu verwenden. Irgendwelche Ideen zu dem, was das Problem verursacht? Vielen Dank.

Antwort

6

Ich bin mir nicht sicher, was Sie meinen, wenn Sie sagen "nur ein Teil der Zeichenfolge wird verschlüsselt." Meinst du, dass du noch einen Teil des Klartexts in sTestToConvert sehen kannst, selbst nachdem du Encrypt aufgerufen hast?

Wahrscheinlicher, ich erwarte, dass Sie meinen, wenn Sie Decrypt aufrufen, erhalten Sie nur einen Teil der ursprünglichen Zeichenfolge zurück.

Das ist, weil Encryptjeden Byte-Wert im Ergebnis speichern kann, einschließlich nicht druckbare Zeichen, auch #0, das Nullzeichen. Wenn Sie eine solche Zeichenfolge in einem TMemo oder speichern, behandelt das zugrundeliegende Windows-Steuerelement das Zeichen #0 als das Ende der Zeichenfolge. Es speichert den Rest des verschlüsselten Wertes nicht. Wenn Sie also Decrypt aufrufen, was im Edit-Steuerelement gespeichert ist, entschlüsseln Sie nur einen Teil dessen, was Sie ursprünglich hatten. Wenn Sie eine Textversion der verschlüsselten Daten haben möchten, verwenden Sie die Funktionen Encode und Decode. Die documentation online erwähnt dies. Diese verwenden die Basis-64-Codierung.

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; 
+0

Danke Rob ... das war das Problem und es funktioniert jetzt. Ich schätze die Hilfe. –

Verwandte Themen