2009-05-22 17 views
1

文字列を暗号化しようとしていますが、しばしば文字列の一部のみが暗号化されています。私はこの問題を抱えている誰も見ていないので、おそらく何か間違っています。私はDelphi 2007と2009で同じ問題を抱えています。私はWin XP SP3を使用しています。コードは次のとおりです。Delphi - MadCrypt - 文字列の暗号化と復号化に問題がある

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を使用しようとすると同じ問題が発生します。何が問題の原因となっているかについてのアイデア?ありがとう。

答えて

6

"文字列の一部だけが暗号化されています"とはどういう意味ですか? Encryptを呼び出した後でも、sTestToConvertに平文の一部が表示されることはありますか?

Decryptに電話すると、元の文字列の一部しか戻ってこない場合があります。 Encryptは、非印刷文字を含め、結果にさえ#0任意のバイト値を格納することができるので、ヌル文字です

。このような文字列をTMemoまたはTEditに格納すると、基になるWindowsコントロールは#0文字を文字列の末尾として扱います。残りの暗号化された値は格納されません。したがって、編集コントロールに保存されているものにDecryptを呼び出すと、元々持っていた部分の復号化のみになります。

暗号化されたデータのテキスト版を使用する場合は、EncodeおよびDecode機能を使用してください。 documentation onlineにこれが記載されています。それらはベース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; 
+0

ありがとうございました...問題があり、現在は機能しています。私は助けに感謝します。 –

関連する問題