![]() |
Delphi-Version: 7
RTF-Text verschlüsseln
Hallo,
ich habe da ein kleines Problem. Ich habe ein Programm geschrieben, in dem man Text im RTF-Format schreiben kann, der anschließend verschlüsselt abgespeichert wird. Ich hatte dafür die scwstrcr.dll genutzt und mich immer gewundert, dass die die Zeilen nach dem wieder laden nicht mehr passten. Das Problem ist, dass diese DLL nur reinen Text verschlüsseln kann und ich dabei leider u.a. die Zeilenschaltungen verliere. Kann mir hier jemand sage, wie und womit ich den RTF-Text verschlüsseln und abspeichern kann, ohne die Zeilenschaltungen zu verlieren? viele Grüße Micha |
AW: RTF-Text verschlüsseln
Man könnte den Zeilenvorschub vorab durch Zeichenfolgen ersetzen, die normalerweise im Text nicht vorkommen z.B. <br> oder /n.
Allerdings erscheint es sinnvoller einanderes Verfahren/Komponente zur Verschlüsselung einzusetzen. |
AW: RTF-Text verschlüsseln
Wandle den Text erst nach Base64.
|
AW: RTF-Text verschlüsseln
Zitat:
Delphi-Quellcode:
(sieh aber nach, ob das wirklich der Code dafür ist)
{\line}
Dann kannst Du auf Sonderzeichen jeglicher Art verzichten. |
AW: RTF-Text verschlüsseln
Schon diff probiert? Dann könnte man mehr sagen (welche RTF-Code/Textänderung das Problem bewirkt)...
|
AW: RTF-Text verschlüsseln
@Mikkey:
Nein, auf Sonderzeichen kann ich nicht verzichten, die werden auch benötigt. @Bernhard: Hab mal nach Base64 gesucht, da ich damit noch nix gemacht hab. Wenn ich das richtig sehe, wollen die Funktionen aber einen String zur Umwandlung. Wenn ich aber den reinen Text aus der Richview Komponente (der ist String) auslese, fehlen mir die Zeilenschaltung (Enter dürfen die Nutzer auch anwenden) schon. Wie kann ich denn den RTF-Text in Base64 umwandeln? @mjustin: Nein, diff hab ich noch nicht probiert, verstehe aber auch gerade nicht wie mir das helfen kann. |
AW: RTF-Text verschlüsseln
Moin Micha,
ein RTF ist ja eigentlich nur ein Text. Wenn Du TRichEdit verwendest muss PlainText aber auf false stehen. Beispiel:
Delphi-Quellcode:
var
ms : TMemoryStream; sl : TStringList; begin ms := TMemoryStream.Create; try sl := TStringList.Create; try redtWork.Lines.SaveToStream(ms); ms.Position := 0; sl.LoadFromStream(ms); ShowMessage(sl.Text); finally sl.Free; end; finally ms.Free; end; end; |
AW: RTF-Text verschlüsseln
UPS!
Hab gerade neue Erkenntnisse gewonnen. Ich habe mir beim Debuggen mal die Texte vorm Verschlüsseln und Speichern, sowie nach dem laden und entschlüsseln anzeigen lassen, und es sieht in Debug-Fenster so aus als hätte der Text die entsprechenden Zeilenschaltungen noch. Das bedeutet, das ich den 'also noch formatierten' Text nur wieder in mein TRichview-Feld bekommen muss. D.h. ja, ich kann meine alte Verschlüsselungs DLL weiterhin nutzen und hatte nur einen Fehler beim Laden. Ich denke da finde einen Weg. Danke an alle die geantwortet haben. :) @Christian: Nee, ich nutzt die TRichview-Komponente, da ich beim normalen TRichEdit Darstellungunterschiede zwischen Bildschirm und Drucker hatte. |
AW: RTF-Text verschlüsseln
Was ist denn das für eine Verschlüsselung? Eigentlich sollte es einer Verschlüsselung egal sein, was die Daten repräsentieren. Ob das nun Text, eine Grafik oder was auch immer ist.
|
AW: RTF-Text verschlüsseln
Zitat:
Versuche es wie folgt (unter Verwendung des ![]()
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz