AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Variablentypen bei ord() erzeugen Fehler

Offene Frage von "KodeZwerg"
Ein Thema von Nox · begonnen am 12. Jul 2018 · letzter Beitrag vom 13. Jul 2018
Antwort Antwort
Seite 3 von 5     123 45   
Nox

Registriert seit: 12. Jul 2018
20 Beiträge
 
#21

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 22:58
Bin damit raus, viel Glück.
Dankeschön für die große Hilfe!!
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
20 Beiträge
 
#22

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:00
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
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
946 Beiträge
 
#23

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:04
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.

Geändert von gammatester (12. Jul 2018 um 23:12 Uhr)
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
20 Beiträge
 
#24

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:09
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
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.363 Beiträge
 
Delphi 2009 Professional
 
#25

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:14
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)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
20 Beiträge
 
#26

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:19
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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.961 Beiträge
 
Delphi 7 Personal
 
#27

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:24
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
20 Beiträge
 
#28

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:29
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
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.363 Beiträge
 
Delphi 2009 Professional
 
#29

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:38
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;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Nox

Registriert seit: 12. Jul 2018
20 Beiträge
 
#30

AW: Variablentypen bei ord() erzeugen Fehler

  Alt 12. Jul 2018, 23:49
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!

LG Noah
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf