Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Variablentypen bei ord() erzeugen Fehler (https://www.delphipraxis.net/197036-variablentypen-bei-ord-erzeugen-fehler.html)

Nox 12. Jul 2018 22:58

AW: Variablentypen bei ord() erzeugen Fehler
 
Zitat:

Zitat von KodeZwerg (Beitrag 1407093)
Bin damit raus, viel Glück.

Dankeschön für die große Hilfe!!

Nox 12. Jul 2018 23:00

AW: Variablentypen bei ord() erzeugen Fehler
 
Zitat:

Zitat von p80286 (Beitrag 1407089)
Beim Ver- und Entschlüsseln würde ich maximalen Abstand von Strings nehmen, binär wäre besser aber sei's drum

Delphi-Quellcode:
var
  Infile : Textfile;
   s,t: string;
   i: integer;
   c1,c2: char;
begin
   assignfile(infile,'c:\irgendwo\Meinzuverschluesselnder.txt');
   reset(infile);
   assignfile(outfile,'c:\rgendwoanders\verschluesselter.txt');
   rewrite(outfile);
   //------------------------
   // Hier sollte nun eine Repeat until oder
   // while - Schleife beginnen
   //----------------
   readln(infile,s); //s ist der erste String einer Textdatei
   t := '';
   for i:=1 to length(s) do begin
     c1 := s[i]; // s[1] ist der ite Buchstabe des Strings
     //berechne c2 aus c1 //Ist c1 dabei der unverschlüsselte Buchstabe und c2 der verschlüsselte?
     //Beispiel:
     //die nächste Zeile invertiert das unterste Bit des Zeichens
     c2 := char(ord(c1) xor 1); //Eine Art Versclüsselung
     t := t + c2; //ist t der String der im Ausgabedokument abgespeichert werden soll? - Ja
   end;
   writeln(Outfile,t);
   //--------
   closefile(outfile);
   closefile(Infile);
end;
Gruß
K-H


Ein maximaler Abstand von Strings?

LG Noah

gammatester 12. Jul 2018 23:04

AW: Variablentypen bei ord() erzeugen Fehler
 
Zitat:

Zitat von Nox (Beitrag 1407090)
Bei dem 2. versteh ich es jedoch nicht ganz...ist es nicht egal welche Zahlen benutzt werden da die Verschlüsselung ja mit der Multiplikation und erst die Entschlüsselung mit der Division des bereits benutzten Multiplikators abläuft?

Nein, aus zwei Gründen. Die (Ansi-)Zeichen haben 8-Bit, ord also liefert Werte 0..255, wenn Du die multipliziert erhält man im allgemeinen Werte > 255, die damit nicht in ein Zeichen passen. Deshalb könnte der Verschlüsselungsteil sein

c2 := char( faktor*ord(c1) mod 256)

als nur die untersten 8 Bit des Produkts.

Zweitens: Wenn Du zB faktor=16 hast, gibt es ein Problem

16 -> 0
32 -> 0

etc. Das heißt, eine Entschlüsselung ist nicht möglich. Aber zB factor=13 ist, entschlüsselt wird dann mit dem Faktor 197. (Das ist modulare Mathematik, muss man nicht unbedingt wissen).

Und nochmal: Dies ist nur eine Einführung und gefährlich, weil nicht darstellbar Zeichen entstehen können. Wie schon von p80286 gesagt: binär wäre besser, d.h. Dein Ausgabe wäre ein file of byte.

Aber bau erstmal die Sache mit char/string.

Gute Nacht.

Nox 12. Jul 2018 23:09

AW: Variablentypen bei ord() erzeugen Fehler
 
Zitat:

Zitat von gammatester (Beitrag 1407096)
Zitat:

Zitat von Nox (Beitrag 1407090)
Bei dem 2. versteh ich es jedoch nicht ganz...ist es nicht egal welche Zahlen benutzt werden da die Verschlüsselung ja mit der Multiplikation und erst die Entschlüsselung mit der Division des bereits benutzten Multiplikators abläuft?

Nein, aus zwei Gründen. Die (Ansi-)Zeichen haben 8-Bit, ord also liefert Werte 0..255, wenn Di die multipliziert erhält man im allgemeinen Werte > 255, die damit nicht in ein Zeichen passen. Deshalb könnte der Verschlüsselungsteil sein

c2 := char( faktor*ord(c1) mod 256)

als nur die untersten 8 Bit des Produkts.

Zweitens: Wenn Du zB faktor=16 hast, gibt es ein Problem

16 -> 0
32 -> 0

etc. Das heißt, eine Entschlüsselung ist nicht möglich. Aber zB factor=13 ist, entschlüsselt wird dann mit dem Faktor 197. (Das ist modulare Mathematik, muss man nicht unbedingt wissen).


Das sieht sehr logisch aus jedoch hab ich davon mit 16 Jahren leider keine Ahnung Tut mir leid!
Ich versuche jetzt erstmal mit allen Hilfen das Programm zusammenzubasteln!

LG Noah

KodeZwerg 12. Jul 2018 23:14

AW: Variablentypen bei ord() erzeugen Fehler
 
Rein Interessehalber, funktioniert mein Beispiel-Code bei Dir nicht oder ist es die falsche Art der "verschluesselung" die ich anwende, weil das Beispiel funktioniert von vorne bis hinten solange es Text ist um den es sich handelt.
(Post #15 meine ich)

Nox 12. Jul 2018 23:19

AW: Variablentypen bei ord() erzeugen Fehler
 
Zitat:

Zitat von KodeZwerg (Beitrag 1407100)
Rein Interessehalber, funktioniert mein Beispiel-Code bei Dir nicht oder ist es die falsche Art der "verschluesselung" die ich anwende, weil das Beispiel funktioniert von vorne bis hinten solange es Text ist um den es sich handelt.

Tatsächlich war ich bis eben noch am aufräumen im Code jedoch hab ich jetzt meines Wissens die Funktionen so eingearbeitet, dass es funktionieren sollte, jedoch erscheint nur ein leeres Dokument nach dem Ausführen...ich denke aber das liegt eher an mir

Die beiden verwendeten Prozeduren:
Delphi-Quellcode:
//String aus einer Datei laden Funktion
function LoadStringFromFile(sInFile: String; var sFileString: String): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  if not FileExists(sInFile) then Exit;
  FileStream := TFileStream.Create(sInFile, fmOpenRead);
  try
    if FileStream.Size <> 0 then begin
      SetLength(sFileString, FileStream.Size);
      FileStream.Read(sFileString[1], FileStream.Size);
      Result := True;
    end;
  finally FileStream.Free end;
end;
//Funktion Ende
//Funktion Verschlüsselung
procedure Verschluesselung(const InputString: string; const Modifier: Byte; var Output: String);
var
  s: string;
  i: Integer;
  b: Byte;
  f: file of Byte;
begin
  // Datei mit verschluesseltem Inhalt sichern
  AssignFile(F, 'C:\Users\Noah\Desktop\hallo.txt');
  Rewrite(f);
  for i := 1 to Length(InputString) do
  begin
    b := Ord(InputString[i]) + Modifier;
    write(f, b);
  end;
  CloseFile(F);

  // Datei mit verschluesseltem Inhalt laden
  AssignFile(F, 'C:\Users\Noah\Desktop\hallo.txt');
  Reset(F);
  s := '';
  while not Eof(F) do
  begin
    Read(f, b);
    s := s + Char(b - Modifier);
  end;
  CloseFile(F);
  Output := S;
end;
//Funktion Ende
Der Button:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  dateistring,output:String;

begin
   //String laden (Dateipfad der umzuwandelnden Datei,Ziel String)
    LoadStringFromFile(filename,dateistring);
   //Verschlüsselung laden
    verschluesselung(dateistring,StrToInt(Edit1.text),output);
      showmessage(output);





end;
LG Noah

p80286 12. Jul 2018 23:24

AW: Variablentypen bei ord() erzeugen Fehler
 
Nochmal in aller Deutlichkeit
Du verschlüsselst Daten, keine Zeichen! Wenn Du mit Char oder Strings und Texfiles hantierst kannst Du Dir jede Menge ungewollte Fehler einhandeln.
Das mag ein- zweimal gut gehen aber auf Dauer geht das schief.

Gruß
K-H

Nox 12. Jul 2018 23:29

AW: Variablentypen bei ord() erzeugen Fehler
 
Zitat:

Zitat von p80286 (Beitrag 1407102)
Nochmal in aller Deutlichkeit
Du verschlüsselst Daten, keine Zeichen! Wenn Du mit Char oder Strings und Texfiles hantierst kannst Du Dir jede Menge ungewollte Fehler einhandeln.
Das mag ein- zweimal gut gehen aber auf Dauer geht das schief.

Gruß
K-H

Soll ich jetzt alles ins Binärsystem umwandeln?
Wenn ja wie? Tut mir leid aber ich zwinge auch niemandem mir zu helfen.

LG Noah

KodeZwerg 12. Jul 2018 23:38

AW: Variablentypen bei ord() erzeugen Fehler
 
Hier meine Variante entheddert so das Du theoretisch damit gleich loslegen kannst, wenn niemand einwände hat.
Nur für Text, wohlgemerkt(!)
Delphi-Quellcode:
procedure CryptStringToFile(const InputString: string; const Modifier: Byte; const Filename: String);
var
  s: string;
  i: Integer;
  b: Byte;
  f: file of Byte;
begin
  AssignFile(F, Filename);
  Rewrite(f);
  for i := 1 to Length(InputString) do
  begin
    b := Ord(InputString[i]) + Modifier;
    write(f, b);
  end;
  CloseFile(F);
end;

function CryptFileToString(const Filename: string; const Modifier: Byte): String;
var
  b: Byte;
  f: file of Byte;
begin
  AssignFile(F, Filename);
  Reset(F);
  Result := '';
  while not Eof(F) do
  begin
    Read(f, b);
    Result := Result + Char(b - Modifier);
  end;
  CloseFile(F);
end;
So hier Aufrufen:
Delphi-Quellcode:
var
  s : String;
begin
  s := 'Das ist ein DP Test.';
  // in dieser Zeile speichern wir einen String S verschluesselt in eine Datei
  CryptStringToFile(S, 5, Application.ExeName+'.txt');

  s := ''; // <- hier wird String gekillt, wir wollen ja nicht cheaten :-)
  // in dieser Zeile holen wir den verschluesselten String zurück
  s := CryptFileToString(Application.ExeName+'.txt', 5);

  // mach was mit "s"
end;

Nox 12. Jul 2018 23:49

AW: Variablentypen bei ord() erzeugen Fehler
 
Zitat:

Zitat von KodeZwerg (Beitrag 1407104)
Hier meine Variante entheddert so das Du theoretisch damit gleich loslegen kannst, wenn niemand einwände hat.
Nur für Text, wohlgemerkt(!)
Delphi-Quellcode:
procedure CryptStringToFile(const InputString: string; const Modifier: Byte; const Filename: String);
var
  s: string;
  i: Integer;
  b: Byte;
  f: file of Byte;
begin
  AssignFile(F, Filename);
  Rewrite(f);
  for i := 1 to Length(InputString) do
  begin
    b := Ord(InputString[i]) + Modifier;
    write(f, b);
  end;
  CloseFile(F);
end;

function CryptFileToString(const Filename: string; const Modifier: Byte): String;
var
  b: Byte;
  f: file of Byte;
begin
  AssignFile(F, Filename);
  Reset(F);
  Result := '';
  while not Eof(F) do
  begin
    Read(f, b);
    Result := Result + Char(b - Modifier);
  end;
  CloseFile(F);
end;
So hier Aufrufen:
Delphi-Quellcode:
var
  s : String;
begin
  s := 'Das ist ein DP Test.';
  // in dieser Zeile speichern wir einen String S verschluesselt in eine Datei
  CryptStringToFile(S, 5, Application.ExeName+'.txt');

  s := ''; // <- hier wird String gekillt, wir wollen ja nicht cheaten :-)
  // in dieser Zeile holen wir den verschluesselten String zurück
  s := CryptFileToString(Application.ExeName+'.txt', 5);

  // mach was mit "s"
end;

So funktioniert es perfekt ich baue jetzt nur noch eine Speicherfunktion hintendran und versuche daraus zu lernen Vielen Vielen Dank!:-D

LG Noah


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 Uhr.
Seite 3 von 5     123 45      

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