Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Verschlüsselung
Delete - Sa 03.02.07 14:43
Titel: Verschlüsselung
hallo,
ich bin neu bei delphi, d.h. ich bin erst seit ein paar monaten dabei.
ich möchte einen einfachen text verschlüsseln, aber nicht die Xor-methode verwenden!!!
kann mir jemand helfen, indem er wie sagt wie ich den text mit sonderzeichen, einfach, symmetrisch verschlüsseln und wieder entschlüsseln kann???
danke im voraus
marvin521993 - Sa 03.02.07 15:02
Hallo,
Verschlüsseln machst du mit wenn du zwei memos hast und eine combobox,wo ausgewählt wird um wie viel man verschlüsseln will, musst du einfach jeden buchstaben nach für nach verschlüsseln und in memo2 ausgeben.
LG
Marvin
marvin521993 - Sa 03.02.07 15:08
das sehe dann ungefähr so aus:
Delphi-Quelltext
1: 2: 3: 4:
| begin Memo2.Clear; For i:=1 to length(Memo1.text) do Memo2.Text := Memo2.Text + char(ord(Memo1.text[i])+StrToInt(ComboBox1.Text)); |
hoffe das ich dir helfen konnte
LG
Marvin
Moderiert von
matze: Delphi-Tags hinzugefügt
Delete - Sa 03.02.07 17:32
@ Marvin
Ich wollte ein Schluesselwort in ein Edit-Feld eingeben, Ein-/ und Ausgabetext sollten in 2 Memofelder. Ein Buttonklick soll die Prozedur starten. Doch ich habe das Problem, dass Schluesselwort, Ein-/ und Ausgabetext die gleich Laenge haben muessen, was nicht der Fall sein soll.
JayEff - Sa 03.02.07 17:35
Wenn du Xor wegen der Sicherheit nicht einsetzen willst, dann kann ich dir sagen, dass alles, was symetrisch ist, etwa genauso sicher ist ;)
Hier mal ein Algo, den ich eben Freihand geschrieben und in einem anderen Thread gepostet hab. könnte fehler enthalten.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function encode(text, key: String):String; var i,keypos:integer; begin keypos:=1; for i:=1 to length(text) do begin Result:=Result+char(byte(ord(text[i])+ord(key[keypos]))); inc(keypos); if keypos > length(key) then keypos:=1; end; end; |
Delete - Sa 03.02.07 17:38
Titel: Re: Verschlüsselung
Wenn du mir jetzt noch den Quelltext ungefaehr erklaeren koenntest, waer das echt net!!
!
Danke
Delete - Sa 03.02.07 17:58
hier mal kurz was zum lesen:
Delete - Sa 03.02.07 18:40
Titel: Re: Verschlüsselung
Kann mir jemand sagen, was ich tun muss, dass dieser Quelltext funktioniert???
D.h. wenn sowohl Eingabetext und Schluesselwort 3 Buchstaben haben funtioniert er, ansonsten nicht!!!
1:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| unit verschluesselung_Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Memo2: TMemo; Memo1: TMemo; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; i, ii: integer; sw: string; te: string; vt: string;
implementation
{$R *.nfm}
procedure TForm1.Button1Click(Sender: TObject); begin if edit1.Text='' then begin showmessage('Bitte geben Sie ein Schlüsselwort ein!'); exit; end; if memo1.Text='' then begin showmessage('Bitte geben Sie den zu verschlüsselnden Text ein!'); exit; end; sw:=edit1.text; te:=memo1.Text; for i:=1 to length(te) do te[i]:=char(ord(te[i])+ord(sw[i])); memo2.text:=te; end;
end. |
Danke
JayEff - Sa 03.02.07 18:46
Titel: Re: Verschlüsselung
ma$ter hat folgendes geschrieben: |
Kann mir jemand sagen, was ich tun muss, dass dieser Quelltext funktioniert???
D.h. wenn sowohl Eingabetext und Schluesselwort 3 Buchstaben haben funtioniert er, ansonsten nicht!!! |
Schau dir meinen an und dann weist du, was du an deinem ändern musst. Bzw benutz einfach meinen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function encode(text, key: String):String; var i,keypos:integer; begin keypos:=1; for i:=1 to length(text) do begin Result:=Result+char(byte(ord(text[i])+ord(key[keypos]))); inc(keypos); if keypos > length(key) then keypos:=1; end; end; |
Robinator - Sa 03.02.07 18:49
Titel: Re: Verschlüsselung
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.Button1Click(Sender: TObject); begin if edit1.Text='' then begin showmessage('Bitte geben Sie ein Schlüsselwort ein!'); exit; end; if memo1.Text='' then begin showmessage('Bitte geben Sie den zu verschlüsselnden Text ein!'); exit; end; sw:=edit1.text; te:=memo1.Text; while sw < te do sw := sw + sw;
for i:=1 to length(te) do te[i]:=char(ord(te[i])+ord(sw[i])); memo2.text:=te; end; |
so sollte es gehen (auch wenn der algo geradezu lächerlich unsicher ist^^)
gruss, rob
JayEff - Sa 03.02.07 18:51
Titel: Re: Verschlüsselung
Robinator hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| while length(sw) < length(te) do sw := sw + sw;
for i:=1 to length(te) do te[i]:=char(ord(te[i])+ord(sw[i])); memo2.text:=te; end; |
so sollte es gehen (auch wenn der algo geradezu lächerlich unsicher ist^^)
gruss, rob |
Unsicher nur, wenn das passwort recht klein ist. bei einem 500 Zeichen PW und einem 500 Zeichen text, bei dem das PW auch noch absolut zufällig ist, ist es recht sicher ;)
Robinator - Sa 03.02.07 18:55
Ups, da hat sich wohl nen fehler eingeschliche, sry :)
Du hast natürlich recht, mit nem one time pattern ist selbst so ein algorithmus sicher, in dem fall wäre aber auch XOR (fast) absolut sicher.
(falls das jetzt nicht gaaanz stimmen sollte, nich gleich steinigen, ich bin kein wirklicher Fachmann in sachen Kryptologie)
gruss, rob
JayEff - Sa 03.02.07 19:58
Robinator hat folgendes geschrieben: |
(falls das jetzt nicht gaaanz stimmen sollte, nich gleich steinigen, ich bin kein wirklicher Fachmann in sachen Kryptologie) |
Ich auch nicht, unsere Meinungen stimmen aber überein, also haben wir Recht. ;)
Ein One Time Pad ist absolut 100% sicher, solang das Passwort wirklich nur 1 mal benutzt wird und dem Feind nicht in die Hände fällt ^^
Delete - Sa 03.02.07 20:50
Titel: Re: Verschlüsselung
Okay, danke!!!
Nur nebenbei, die obrgie Methode soll kein Passwortverschluessler sein, sonder lediglich einen einfachen Text fuer den ersten Augenblick nicht entzifferbar machen!!!
Ich glaub ich habs verstanden und was waer dann die naechste Stufe fuer einen sicheren Text bzw. was ist sicherer Xor oder die obendrueber???
JayEff - Sa 03.02.07 21:10
alle polyalphabetischen verschlüsselungen sind etwa gleich sicher. Wenn du bei meinem Code + mit xor vertauscht, hast du auch ne xor verschlüsselung. die nächst höhere sicherheit? Hm .. mal abgesehen von zufallsgenerierten, langen Passwörtern gibts da wohl nur noch asymetrische verschlüsselungen. einfach mal googlen. AES is auch ein Stichwort, Advanced Encryption Standart...
Delete - Sa 03.02.07 22:12
Titel: Re: Verschlüsselung
Naechste Frage:
Ich habe die Xor Methode unter
http://www.dsdt.info gefunden und ausprobiert. Unter dem Artikel stand, dass die Methode sehr unsicher ist. Kann mir jemand unkompliziert erklaeren was es mit dem Zuweisungoperator Xor eigentlich auf sich hat???
Danke im voraus!!!
Delete - Sa 03.02.07 23:37
guckste hier:
Delete - So 04.02.07 14:16
Titel: Re: Verschlüsselung
@ JayEff
Wenn ich deine Methode nehme, bekomme ich's in ner Prozedur ja noch hin, aber wenn ich ne Funktion benutz klappts net mehr!!!
Delete - So 04.02.07 15:24
Titel: Re: Verschlüsselung
D.h. wenn ich die Funktion mit ner Procedure aufrufen will, kommt ein Fehler.
Wer kann mit helfen???
Danke - ih bin Anfaenger
azubi_20 - So 04.02.07 15:31
ma$ter hat folgendes geschrieben: |
D.h. wenn ich die Funktion mit ner Procedure aufrufen will, kommt ein Fehler.
|
was soll das heißen ?
poste mal quelltext und Fehler, dann sehen wir weiter...
Delete - So 04.02.07 16:04
Titel: Re: Verschlüsselung
Hier ist der Quelltext:
1:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| unit verschluesselung_Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Memo2: TMemo; Memo1: TMemo; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.nfm}
function encode(text, key: String):String; var i,keypos:integer; begin text:=form1.memo1.text; key:=form1.Edit1.Text; keypos:=1; for i:=1 to length(text) do begin Result:=Result+char(byte(ord(text[i])+ord(key[keypos]))); inc(keypos); if keypos > length(key) then keypos:=1; end; form1.Memo2.Text:=result; end;
procedure TForm1.Button1Click(Sender: TObject); begin encode(); end;
end. |
moddin - So 04.02.07 16:06
nimm die RC4 Unit von hagen reddman
1 cryptografisch sicher nicht so ein dummer RumgeXORrre :P
2 schnell + häufigkeitsverschleieru + man aus einem verschlüsselten text
auch einzelne segmente entschlüsseln weiß aber nicht ob das für dich interessant ist (sockets???)
Delete - So 04.02.07 16:12
Titel: Re: Verschlüsselung
Ich wuerde den trotzdem wissen, wie ich DIESEN Quelltext fehlerfrei schreiben kann...
tommie-lie - So 04.02.07 16:44
JayEff hat folgendes geschrieben: |
Wenn du Xor wegen der Sicherheit nicht einsetzen willst, dann kann ich dir sagen, dass alles, was symetrisch ist, etwa genauso sicher ist ;) |
Wie kommst du darauf?
JayEff hat folgendes geschrieben: |
AES is auch ein Stichwort, Advanced Encryption Standart... |
Und Rijndael ist was für ein Verschlüsselungsverfahren?
:roll:
Delete - So 04.02.07 16:53
Titel: Re: Verschlüsselung
Okay, anders: Kann mir bitte jemand diesen Quelltext korrigieren?
1:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| unit verschluesselung_Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Memo2: TMemo; Memo1: TMemo; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.nfm}
function encode(text, key: String):String; var i,keypos:integer; begin text:=form1.memo1.text; key:=form1.Edit1.Text; keypos:=1; for i:=1 to length(text) do begin Result:=Result+char(byte(ord(text[i])+ord(key[keypos]))); inc(keypos); if keypos > length(key) then keypos:=1; end; form1.Memo2.Text:=result; end;
procedure TForm1.Button1Click(Sender: TObject); begin encode(); end;
end. |
tommie-lie - So 04.02.07 17:04
Titel: Re: Verschlüsselung
ma$ter hat folgendes geschrieben: |
|
Wie meinen?
ma$ter hat folgendes geschrieben: |
|
Weil die Funktion encode zwei Parameter annimmt, einmal text und einmal key, beide vom Typ String, du aber keinen einzigen Parameter übergibst. Parameter werden in die Klammern geschrieben und mit Kommata getrennt. Du möchtest vielleicht
encode(Memo1.Text, Edit1.Text); benutzen und dafür im Funktionskörper die ersten Beiden Zeilen (die Zuweisung von text und key) entfernen. Außerdem möchtest du
diesen [
http://www.christian-stelzmann.de/artikel/crashkurs.htm] Text lesen.
Delete - So 04.02.07 17:26
Titel: Re: Verschlüsselung
keypos:=1 => Keypos soll die Position des Schluesselwortes angeben, welche an dieser Stelle auf 1 gesetzt wird!
Delete - So 04.02.07 18:38
Titel: Re: Verschlüsselung
ma$ter hat folgendes geschrieben: |
Okay, anders: Kann mir bitte jemand diesen Quelltext korrigieren?
1: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| unit verschluesselung_Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Memo2: TMemo; Memo1: TMemo; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.nfm}
function encode(text, key: String):String; var i,keypos:integer; begin text:=form1.memo1.text; key:=form1.Edit1.Text; keypos:=1; for i:=1 to length(text) do begin Result:=Result+char(byte(ord(text[i])+ord(key[keypos]))); inc(keypos); if keypos > length(key) then keypos:=1; end; form1.Memo2.Text:=result; end;
procedure TForm1.Button1Click(Sender: TObject); begin encode(); end;
end. | |
du weisst aber schon, dass deine routine sehr, sehr fehleranfällig ist und nur bis #127 einigermassen fehlerfrei arbeitet. ausserdem ist er nur für single-byte strings geeignet. wirf den algo lieber weg und hol dir was vernünftiges. nur 'n kleiner tip am rande.
azubi_20 - So 04.02.07 19:38
also ohne dass ich jetzt den algo überprüft habe, so wird die Funktion richtig aufgerufen :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| unit verschluesselung_Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Memo2: TMemo; Memo1: TMemo; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.nfm}
function encode(text, key: String):String; var i,keypos:integer; begin keypos:=1; for i:=1 to length(text) do begin Result:=Result+char(byte(ord(text[i])+ord(key[keypos]))); inc(keypos); if keypos > length(key) then keypos:=1; end;
end;
procedure TForm1.Button1Click(Sender: TObject); begin form1.Memo2.Text:=encode(form1.memo1.Text,form1.Edit1.Text); end;
end. |
Delete - So 04.02.07 21:30
Danke an alle, die mit geholfen haben, mein problem zu beseitigen, ich habe jetzt den vollstaendigen Quelltext!!!
JayEff - So 04.02.07 22:01
tommie-lie hat folgendes geschrieben: |
JayEff hat folgendes geschrieben: | Wenn du Xor wegen der Sicherheit nicht einsetzen willst, dann kann ich dir sagen, dass alles, was symetrisch ist, etwa genauso sicher ist ;) | Wie kommst du darauf?
|
Was spricht dagegen? Nehmen wir an, den selben Text mit dem selben Passwort zu verschlüsseln, und bleiben bei einer polyalphabetischen, symetrischen verschlüsselung, bleibt die sicherheit etwa gleich, oder nicht?
(Ich geb zu, ich hab das "polyalphabetisch" vergessen, das schließt alles, was nicht wie vigenere funktioniert, aus, zumindest in meiner Vorstellung :oops: )
JayEff hat folgendes geschrieben: |
AES is auch ein Stichwort, Advanced Encryption Standart... |
Und Rijndael ist was für ein Verschlüsselungsverfahren?[/quote]
Ich weiß nicht. Aber keine rein polyalphabetische, symetrische Verschlüsselung, oder?
tommie-lie - Mo 05.02.07 00:37
JayEff hat folgendes geschrieben: |
Was spricht dagegen? |
Die Tatsache, daß symmetrische Verfahren in der Regel mathematisch beweisbar sicher sind, während asymmetrische Verfahren nur vermutet sicher sind (und Beweise ihrer Unsicherheit denkbar sind).
JayEff hat folgendes geschrieben: |
Nehmen wir an, den selben Text mit dem selben Passwort zu verschlüsseln, und bleiben bei einer polyalphabetischen, symetrischen verschlüsselung, bleibt die sicherheit etwa gleich, oder nicht?
(Ich geb zu, ich hab das "polyalphabetisch" vergessen, das schließt alles, was nicht wie vigenere funktioniert, aus, zumindest in meiner Vorstellung :oops: ) |
Das hat mit monoalphabetisch und polyalphabetisch nicht viel zu tun. Wichtig ist das Beiwerk, was also sonst noch mit den substituierten Buchstaben passiert. Ansonsten ist jede monoalphabetische Substitution anfällig für die Häufigkeitsanalyse, polyalphabetische Substitutionen nicht direkt. Übrigens basierte die Enigma auf einer polyalphabetischen Substitution.
JayEff hat folgendes geschrieben: |
Zitat: | Und Rijndael ist was für ein Verschlüsselungsverfahren? | Ich weiß nicht. Aber keine rein polyalphabetische, symetrische Verschlüsselung, oder? |
Oder. Abgesehen davon, daß Rijndael monoalphabetisch ist.
JayEff - Mo 05.02.07 01:01
tommie-lie hat folgendes geschrieben: |
Wichtig ist das Beiwerk, was also sonst noch mit den substituierten Buchstaben passiert. |
Also hat das mit meiner Aussage nichts zu tun, da ich mich auf reine, polyalphabetische Substitution bezogen habe. Kein Beiwerk vor oder nach der Substitution. Keine Permutation, nichts.
tommie-lie hat folgendes geschrieben: |
Ansonsten ist jede monoalphabetische Substitution anfällig für die Häufigkeitsanalyse, polyalphabetische Substitutionen nicht direkt. |
Poly. aber auch. Ein längerer Text mit kürzerem Schlüssel kann über einen Umweg genauso per häufigkeitsanalyse geknackt werden, sobald man die Länge des Schlüssels kennt. Die kann man natürlich rausfinden.
tommie-lie hat folgendes geschrieben: |
Übrigens basierte die Enigma auf einer polyalphabetischen Substitution.
|
Weis ich.. Von den Polen geknackt durch eine ihnen zugespielte Originalmaschine. Danach haben die Leute im Bletchley Park weiter gemacht, wo die Polen aufhören mussten. Ich bin kein Fachmann auf dem Gebiet, aber ich hab das ein, oder andere Buch gelesen :)
Aber genug OT :oops:
tommie-lie - Mo 05.02.07 01:11
JayEff hat folgendes geschrieben: |
Also hat das mit meiner Aussage nichts zu tun, da ich mich auf reine, polyalphabetische Substitution bezogen habe. Kein Beiwerk vor oder nach der Substitution. Keine Permutation, nichts. |
Nein. Umgekehrt hat deine Aussage nichts mit sich selbst zu tun, weil die Information über das Substitutionsverfahren keinerlei Rückschlüsse auf den Rest des Verfahrens liefert. Die meisten verbreiteten symmetrischen Verfahren sind meines Wissens monoalphabetisch. Dennoch ist es mit einfacher Statistik nicht getan, sie zu entschlüsseln.
JayEff hat folgendes geschrieben: |
Poly. aber auch. Ein längerer Text mit kürzerem Schlüssel kann über einen Umweg genauso per häufigkeitsanalyse geknackt werden, sobald man die Länge des Schlüssels kennt. Die kann man natürlich rausfinden. |
Ich wüsste nicht, warum man die zwingend einfach herausfinden kann. Sicherlich gibt es Beispiele, bei denen das geht, Vigenere ist eines. Nur weil weder ich noch du Beispiele von polyalphabetischen Chiffres kennen, die sicherer sind als Vigenere, heißt das nicht, daß sie nicht existieren. Weder du noch ich sind Experten in diesem Themengebiet.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!