Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi RcX die Hundertste (https://www.delphipraxis.net/165267-rcx-die-hundertste.html)

Jo78 21. Dez 2011 10:20

AW: RcX die Hundertste
 
Vielen Dank für eure Antworten.
Also wenn ich stur alle Strings zu AnsiStrings umschreibe läuft es trotzdem nicht sauber. Sprich teilweise funktioniert es, ändere ich den text etwas funktioniert es nicht mehr. Genau das was ich eben mit unsauber meinte.

Zudem haut mir der Compiler mehrfach diese nette Meldung um die Ohren:
Code:
[DCC Warnung] mcry.pas(74): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'AnsiString'
Ich will mal ganz ehrlich sein: Irgendwie finde ich die ganze Methode mit diesen nicht darstellbaren Sonderzeichen unsauber.

himitsu, dein Vorschlag byteweise zu verschlüsseln hört sich gut an. Nur leider kann ich damit überhaupt nichts anfangen, sprich ich weiß nicht mal im Ansatz wie ich das umsetzen kann.

Was ich nicht verstehe ist warum hier nicht mehr Leute an Verschlüsselung interessiert sind. Es wird doch sichere mehrere Leuten geben die Sachen für ihr Programm extern abspeichern müssen und den ganzen Kram nicht jedem präsentieren möchten.

Edith sagt: Vielleicht sind meine Listboxen auch der falsche Ansatz? Nicht das die guten Boxen den Code weil er zu lang ist zerhackstückeln? Wüsste allerdings nicht welche Komponente ich dafür sonst nehmen sollte.


Vielen Dank,
Gruß
Joachim

DeddyH 21. Dez 2011 10:36

AW: RcX die Hundertste
 
Ich habe gerade noch ein älteren Thread zum Thema gefunden: http://www.delphipraxis.net/124699-r...r-delphi7.html

Jo78 21. Dez 2011 12:16

AW: RcX die Hundertste
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
vielen Dank nochmal für den Link. Habe dort den letzten Post befolgt.

Im Prinzip funktioniert es. Das Problem ist, teilweise verschluckt er sich ab einer gewissen Länge. Damit ihr nicht länger rumrätseln müsst was ich falsch gemacht habe, findet ihr die beiden pas Dateien anhängend.

Es wäre wirklich nett, wenn sich jemand den Kauderwelsch mal anschauen könnte :oops:

Zur Erklärung: In der oberen Listbox2 soll der Text in Klartext stehen, in Listbox3 verschlüsselt. Im Memofeld kann ich den Text bearbeiten.

Reihenfolge: Entschlüsseln (Button1) -> in Memobox laden (listbox2.onclick) -> bearbeiten (button3) -> verschlüsseln (button2) -> speichern(button4).

Anwendungsbeispiel (Eingabe):
Code:
123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789
Vielen Dank,
Gruß
Joachim

p80286 21. Dez 2011 22:14

AW: RcX die Hundertste
 
Für die Warnung ist folgendes verantwortlich:
Delphi-Quellcode:
   for I := 0 to ListBox3.Items.Count -1 do
      ListBox2.Items.Add(RCxencode(R, listBox3.Items[I]));
Insbesonders wenn Windows seine Finger im Spiel hat, kann es tödlich sein, visuelle Komponenten für die Textspeicherung zu nutzen.
Wenn Du schon mit listboxen arbeiten willst, dann mach es doch wenigstens so:
Delphi-Quellcode:
var
  myinstring : ansistring;
  myencryptedstring : ansistring;
 
  mydecryptedstring : ansistring;

 for I := 0 to ListBox3.Items.Count -1 do begin
   myinstring:=ListBox3.Items[i];
   myencryptedstring:=RCxencode(R, myinstring);
   ListBox2.Items.Add(myencryptedstring);
   mydecryptedstring:=RCxdecode(R, myencryptedstring);
 end;
Dann gibt es zwar immer noch die Warnung, aber Du kannst die notwendigen Daten wenigstens laufend überprüfen.

Und überprüfe einmal den Inhalt von myinstring und mydecryptedstring wenn beide einen unterschiedlichen Inhalt haben, dann ist ein Wurm in deiner Ver-/Entschlüsselung.

Gruß
K-H

Jo78 22. Dez 2011 11:45

AW: RcX die Hundertste
 
Hallo nochmal,
vielen vielen Dank für deine hilfreiche Antwort.

Ich habe mir das geschriebene zu Herzen genommen und arbeite nun komplett ohne visuelle Komponenten. Alles wird in AnsiStrings verarbeitet und dann direkt in die Textdatei geschrieben.

Die Überprüfung ob Eingabewert und Verschlüsselung übereinstimmen habe ich ebenfalls eingebaut. Ergebnis: Übereinstimmung :-D Demnach muss das Verschlüsseln an sich jetzt korrekt sein.

Das Problem liegt möglicherweise im Speichern (und späteren Laden) in normale Textdateien. Wenn ich die Datei lade entschlüsselt er nicht richtig sondern nur einen Teil. Schaue ich mir die Verschlüsselung in der Textdatei an sind da neben nicht darstellbaren Sonderzeichen auch Leerzeichen.

Prozedur zum verschlüsseln & testen:
Code:
procedure TCry.btmakeClick(Sender: TObject);
var vergleich,fertig,textzeile: ansistring;
var R: TRCxContext; Datei: TextFile;
begin
Trim(textzeile);
try
    RCxInit(R, 'k9N7ZgV7aX');
      fertig:=(RCxdecode(R, textzeile));
  finally
    RCxDone(R);
     end;
AssignFile(Datei, 'sec.ini');
Rewrite(Datei);
if IOResult = 0 then
 begin
 writeln(Datei,fertig);
 closeFile(Datei);
   end;
// nur zum pruefen
   try
    RCxInit(R, 'k9N7ZgV7aX');
      vergleich:=(RCxencode(R, fertig));
  finally
    RCxDone(R);
     end;
if vergleich = textzeile then showmessage('Identisch');
  end;

Meine Prozedur zum Öffnen und Entschlüsseln:
Code:
procedure TForm1.laden;
var ergebnis,geladen:AnsiString; R: TRCxContext; Datei: TextFile;
begin
AssignFile(Datei, 'sec.ini');
Reset(Datei);
ReadLn(Datei,geladen);
CloseFile(Datei);
  try
    RCxInit(R, 'k9N7ZgV7aX');
      ergebnis:=RCxencode(R,geladen);
  finally
    RCxDone(R);
  end;
AssignFile(Datei, 'sec2.ini');
ReWrite(Datei);
WriteLn(Datei,ergebnis);
CloseFile(Datei);
end;
Findet dort jemand einen Fehler oder hat sonst eine Idee woran es liegen könnte? Da die Übereinstimmungsprüfung positiv ausfällt kann es ja "nur" am falschen Speichern oder Laden liegen?
Für die Hilfe welche mir bisher zu Gute gekommen ist nochmal herzlichen Dank an alle Beteiligten :thumb:

Vielen Dank natürlich auch für weitere Hilfe!

Gruß
Joachim

himitsu 22. Dez 2011 12:21

AW: RcX die Hundertste
 
Das wurde doch schon erwähnt?

Nach dem Umkodieren mit RCx entstehen Binärdaten ... das ist kein "Text" mehr.
Du speicherst es dann aber so wie einen Text (WriteLn) und liest es auch wieder so aus (ReadLn).

ReadLn und WriteLn behandeln aber gewisse Zeichen (Zeilenumbrüche, EOF und eventuell noch die #0) auf "besondere Weise" und nun gibt es Probleme, wenn bei deiner Kodierung solche "Steuerzeichen" innerhalb des Textes entstanden sind ... da muß das Auslesen also andere Ergbnisse liefern.

Jo78 22. Dez 2011 12:44

AW: RcX die Hundertste
 
besten Dank für diesen Hinweis. Du hast leider vollkommen Recht, ich hätte dies schon aus deinem vorherigen Beitrag schließen können. Aber da habe ich es noch nicht verstanden, entschuldige dies bitte.

Es funktioniert jetzt alles, nochmals vielen Dank an jeden Helfer.

Gruß
Joachim


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:34 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz