ich habe da ein kleines Problem.
...
Das Problem ist, dass diese
DLL nur reinen Text verschlüsseln kann und ich dabei leider u.a. die Zeilenschaltungen verliere.
Dein Problem ist nicht durch den Encrypt/Decrypt-Algorithmus verursacht, sondern liegt an Deiner falschen Behandlung des Richedit-Inhaltes.
Versuche es wie folgt (unter Verwendung des
Demo-Codes zur scwstrcr.dll erstellt):
Delphi-Quellcode:
var
PinCode: string; // z.B. '1357';
encodedFilename: String; // z.B. <pfad>+'EncodedRTF.dat'
procedure TForm1.EnCryptButtonClick(Sender: TObject);
var
PC, HX: PChar;
FileStream: TFileStream;
StringStream: TStringStream;
PClen: Cardinal;
wrkStr: String;
begin
StringStream := TStringStream.Create('');
try
Richedit1.PlainText := False;
Richedit1.Lines.SaveToStream(StringStream);
wrkStr := StringStream.DataString;
finally
StringStream.Free
end;
pc := pchar(Pincode + wrkStr);
PClen := StrLen(PC);
FileStream := TFileStream.Create(encodedFilename, (fmCreate or fmShareExclusive));
try
ReAllocMem(HX, PClen * 2 + 1);
StrToCodeHex(PC, HX);
FileStream.Write(HX^, PClen * 2 + 1);
finally
ReAllocMem(HX, 0);
FileStream.Free;
end;
Richedit1.Clear; // nur zwecks Demo des anschl.Decrypt-Erfolges gelöscht
end;
procedure TForm1.DeCryptButtonClick(Sender: TObject);
var
PC, HX: PChar;
FileStream: TFileStream;
StringStream: TStringStream;
fsize: cardinal;
temp: String;
begin
FileStream := TFileStream.Create(encodedFilename, fmOpenRead or fmShareExclusive);
try
fsize := Filestream.Size;
setlength(temp, fsize);
HX := Pchar(temp);
FileStream.Read(HX^, fsize);
finally
FileStream.free;
end;
ReAllocMem(PC, fsize div 2 + 1);
try
if CodeHexToStr(PChar(PinCode), PC, HX) then
begin
StringStream := TStringStream.create(StrPas(PC));
try
Richedit1.plaintext := false;
Richedit1.lines.LoadFromStream(StringStream);
finally
StringStream.free;
end
end
else
Showmessage('Cant decode ' + PC[0]);
finally
ReAllocMem(PC, 0);
end;
end;