Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Verschlüsselung + binäre datein
elundril - Do 21.12.06 19:10
Titel: Verschlüsselung + binäre datein
ich hab mir folgenden Algorithmus zusammengebastelt für eine asymetrische (ich denke 128 Bit) 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: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure TForm1.verschlüsselnOnClick(sender: TObject); var Key: array [1..16] of Byte; Zeichenindex, Keyindex: integer; Zeichen: Byte; begin Key[1]:=56; Key[2]:=156; Key[3]:=16; Key[4]:=51; Key[5]:=15; Key[6]:=26; Key[7]:=196; Key[8]:=155; Key[9]:=1; Key[10]:=12; Key[11]:=217; Key[12]:=200; Key[13]:=58; Key[14]:=86; Key[15]:=85; Key[16]:=93; Keyindex:=1; Memo2.clear; for Zeichenindex:=1 to length(Memo1.text) do begin if x>16 then x:=1; Zeichen:=ord(Memo1.text[Zeichenindex]) XOr Key[x]; Memo2.text:=chr(b); x:=x+1; end; end; |
ich wollte mal fragen wie gut diese Verschlüsselungsmethode ist und wie man sie optimieren könnte.
und wie ich das anstellen könnte damit ich z.b.: auch audiodatein oder Bilddatein verschlüsseln könnte.
lg el
Moderiert von
Christian S.: Topic aus Sonstiges (Delphi) verschoben am Fr 22.12.2006 um 18:49
elundril - Fr 22.12.06 16:37
*push*
is es überhaupt eine 128 Bit verschlüsselung??
lg el
Corpsman - Fr 22.12.06 22:05
Also ich glaube ja nicht das es eine 128 Bit verschlüsselung ist.
Du kannst jede Xbeliebiuge Datei verschlüsseln wenn du es mit einel Filestream machst.
Du lädst die File
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var f,f2:Tfilestream; b:Byte; begin .. assignfile(f,Dateiname); Assignfile(f2,Dateiname2); rewrite(f2); reset(f); while not eof(f) do begin f.read(b,sizeof(b)); b := VerschlüsseleByte(b); f2.write(b); end; closefile(f); Closefile(f2); |
Irgendwie so kannst es machen. Hab das aber mal so blind hingetippt.
elundril - Sa 23.12.06 11:14
ok danke! werd mich mal mit TFilestreams beschäftigen.
was sagst du, is die verschlüsselung halbwegs gut??
lg el
Corpsman - Sa 23.12.06 13:56
nu ich denke es kommt darauf an wie wichtig dir deine Datensicherheit ist.
Aber generell sollte dir klar sein das jedes Verschlüsselungsverfahren Knackbar ist. Die heutigen verfahren beruhen darauf das es sehr schwer ist die Primzahlzerlegung einer Zahl zu berechnen.
Aber selbst diese Verschlüsselungen sind in der Regel binnen 1 Tag geknackt.
Was aber genügt weil ja die meisten Informationen nach einer so langen Zeit nicht mehr geheim sind.
Wenn du nun hergehst und die Bilder deiner Freundin verschlüsselst, so sei dir gesagt das es sicher genug ist. Weil sich die Mühe sicherlich nicht lohnt. Ein entsprechendes Dekodierungsverfahren zu erstellen.
Ich persöhnlich finde aber eine selbst zusammengeschusterte Verschlüsselung grunds#ätzlich besser als eine "Offiziele" da bei deinem Verfahren erst mal jemand dahinter kommen mus wie es funktioniert um sich dann Gedanken zu machen wie er es Knackt.
Nur solltest du dann nicht hergehen und dein Verfahren in Irgendwelchen Foren Posten ;) .
Ich habe auch schon diverse Verschlüsselungen entwickelt. Kann sie aber aus eben diesem Grund nicht veröffentlichen.
Hoffe das Hilft dir weiter. Ansonsten geh her und schau dir mal das RSA Verfahren an. Das ist das wol beliebteste zur Zeit.
Ein passendes Sample dafür gibts
Hier [
http://tyrann.deadbyte.de/corpsman/klickcounter.php?url=download/rsa.zip]
DarkLord05 - Sa 23.12.06 14:22
Corpsman hat folgendes geschrieben: |
Ich persöhnlich finde aber eine selbst zusammengeschusterte Verschlüsselung grunds#ätzlich besser als eine "Offiziele" da bei deinem Verfahren erst mal jemand dahinter kommen mus wie es funktioniert um sich dann Gedanken zu machen wie er es Knackt. |
Aber eine Verschlüsselung sollte eig durch die Verschlüsselung an sich sicher sein, und nicht weil geheim ist um was es sich für eine Verschlüsselung handelt ;)
elundril - Sa 23.12.06 14:39
Corpsman hat folgendes geschrieben: |
Ich persöhnlich finde aber eine selbst zusammengeschusterte Verschlüsselung grunds#ätzlich besser als eine "Offiziele" da bei deinem Verfahren erst mal jemand dahinter kommen mus wie es funktioniert um sich dann Gedanken zu machen wie er es Knackt.
Nur solltest du dann nicht hergehen und dein Verfahren in Irgendwelchen Foren Posten ;) . |
tja die Xor verschlüsselungsmethode ist leider schon ziemlich bekannt.
ich hab jetzt nur als beispiel den Schlüssel in einem Array gespeichert und da hab ich irgendwelche zahlen genommen. In meinem Programm hab ich mir eh schon was überlegt um den Schlüssel abzulegen.
lg el
mkinzler - Sa 23.12.06 14:40
Die Annahme, daß ein Verschlüsselungsalgorithmus sicherer ist, wenn er geheim ist, ist ein Trugschluß. Ich würde offene, gut gesteste Verfahre wie z.B. Rijndael (AES) verwenden
elundril - Mi 27.12.06 13:54
Corpsman hat folgendes geschrieben: |
Du kannst jede Xbeliebiuge Datei verschlüsseln wenn du es mit einel Filestream machst.
Du lädst die File
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var f,f2:Tfilestream; b:Byte; begin .. assignfile(f,Dateiname); Assignfile(f2,Dateiname2); rewrite(f2); reset(f); while not eof(f) do begin f.read(b,sizeof(b)); b := VerschlüsseleByte(b); f2.write(b); end; closefile(f); Closefile(f2); |
|
Das Funktioniert irgendwie nicht so richtig! ich hab mich auch ein bischen damit herumgespielt aber ich glaub ich hab mich dadurch von der lösung nur noch weiter entfernt.
lg el
Narses - Mi 27.12.06 14:00
Moin!
Ähm, wie wäre es mit
TFILESTREAM, Beispiele gibt´s da mal genug. ;)
cu
Narses
elundril - Mi 27.12.06 14:18
*lol* sry wenn ich das so sage aber ich hab keine zeit mir 14 Seiten durchzusehen. (muss noch Spezialgebiet schreiben)
Wäre es so umständlich den Code zu posten und mir damit einen gefallen zu tun?
lg el
Narses - Mi 27.12.06 14:28
Moin!
elundril hat folgendes geschrieben: |
*lol* sry wenn ich das so sage aber ich hab keine zeit mir 14 Seiten durchzusehen. |
Oh, das ist aber schade, so wird dir die Benutzung von TFileStream wohl leider unklar bleiben, ist auch wirklich schwer, seh´ ich schon ein, auch auf TFileStream eintippen und F1 drücken kommt man ja nicht von selber... :roll: ;)
Sag mal, sind wir deine Hausaufgaben-Vorbereiter-Sklaven, oder was? :| Ich unterstütze Faulheit jedenfalls nicht. :?
cu
Narses
//EDIT: Naja, weil ja Weihnachten ist, will ich mal nicht so sein:
Klick mich [
http://www.delphi-forum.de/viewtopic.php?p=406975#406975], das kann ich dir aber schon zumuten zu lesen, ja? :mrgreen:
Udontknow - Mi 27.12.06 14:32
Hallo!
Hättest du auch nur einen Blick in die 14 Seiten hineingeworfen, du hättest sofort gewusst, was du falsch gemacht hast. Keine Scheu vor der Hilfe oder anderen Schriftstücken haben!
Hier der überarbeitete Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var f,f2:Tfilestream; b:Byte; begin f:=TFileStream.Create('C:\input.dat',fmOpenRead); try f2:=TFileStream.Create('C:\output.dat',fmCreate); try while f.Position<f.Size do begin f.readbuffer(b,SizeOf(b)); b := VerschlüsseleByte(b); f2.writebuffer(b,SizeOf(b)); end; finally f.Free; end finally f2.Free; end end; |
Cu,
Udontknow
elundril - Mi 27.12.06 14:35
Narses hat folgendes geschrieben: |
Moin!
Oh, das ist aber schade, so wird dir die Benutzung von TFileStream wohl leider unklar bleiben, ist auch wirklich schwer, seh´ ich schon ein, auch auf TFileStream eintippen und F1 drücken kommt man ja nicht von selber... :roll: ;)
|
Wie man vl aus dem satz "ich hab mich auch ein bischen damit herumgespielt aber ich glaub ich hab mich dadurch von der lösung nur noch weiter entfernt." erkennen kann hab ich sehr wohl F1 gedrückt aber irgendwie ist mein delphi englisch und da versteh ich nicht viel.
Narses hat folgendes geschrieben: |
Sag mal, sind wir deine Hausaufgaben-Vorbereiter-Sklaven, oder was? :| Ich unterstütze Faulheit jedenfalls nicht. :?
cu
Narses |
was soll dieser Satz?? ich frag ja nur um ein Code schnipsel das man mir erklären kann. was hat das mit hausaufgaben zu tun??? und was hat nicht verstehen mit faulheit zu tun?
lg el
elundril - Mi 27.12.06 14:37
@Udontknow: ok danke aber bei mir hat er sich immer beim eof aufgehängt.
lg el
Udontknow - Mi 27.12.06 14:40
Ahja, da hatte ich noch was übersehen. Habe es abgeändert.
Cu,
Udontknow
elundril - Mi 27.12.06 14:47
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var f,f2:Tfilestream; b:Byte; begin f:=TFileStream.Create('C:\input.dat',fmOpenRead); try f2:=TFileStream.Create('C:\output.dat',fmCreate); try while f.Position<f.Size do begin f.readbuffer(b,SizeOf(b)); b := VerschlüsseleByte(b); f2.writebuffer(b,SizeOf(b)); end; finally f.Free; end finally f2.Free; end end; |
ok so halbwegs hab ichs verstanden. aber zwei zeilen sind mir unklar!
und braucht man den Filestream gar nicht speichern??
lg el
Narses - Mi 27.12.06 14:48
Moin!
elundril hat folgendes geschrieben: |
aber irgendwie ist mein delphi englisch und da versteh ich nicht viel. |
Aha, ist das unser Problem? ;)
elundril hat folgendes geschrieben: |
Narses hat folgendes geschrieben: | Sag mal, sind wir deine Hausaufgaben-Vorbereiter-Sklaven, oder was? :| Ich unterstütze Faulheit jedenfalls nicht. :? |
was soll dieser Satz?? ich frag ja nur um ein Code schnipsel das man mir erklären kann. was hat das mit hausaufgaben zu tun??? |
OK, sorry, "Hausaufgaben" waren unterstellt. 8)
elundril hat folgendes geschrieben: |
und was hat nicht verstehen mit faulheit zu tun? |
elundril hat folgendes geschrieben: |
*lol* sry wenn ich das so sage aber ich hab keine zeit mir 14 Seiten durchzusehen. |
Da steht nicht, dass du die Beispiele hier (und die sind in deutscher Sprache eingebettet! :mrgreen:) nicht verstehst, sondern dass du sie nicht lesen willst - warum auch immer sollte wohl ebenfalls nicht unser Problem sein, hm? ;)
cu
Narses
Narses - Mi 27.12.06 14:53
Moin!
Delphi-Quelltext
1:
| f.readbuffer(b,SizeOf(b)); |
Liest aus der Datei in die Variable "b". Parametererläuterung in der DOH. ;)
Delphi-Quelltext
1:
| f2.writebuffer(b,SizeOf(b)); |
Schreibt in die Datei den Inhalt von Variable "b", Rest s.o. ;)
Das Streamobjekt ist nur ein "Hilfsmittel", um Zugriff auf die Daten auf der Platte zu nehmen, deshalb kann man ein Streamobjekt nicht speichern, das machen ja gerade die Methoden oben (lesen/schreiben).
cu
Narses
Udontknow - Mi 27.12.06 14:56
Readbuffer liest aus einem Stream etwas aus. Wenn du ein Byte auslesen willst, übergibst du eine ByteVariable, und SizeOf(B) gibt dann die Größe des auszulesenden Typen in Byte an (Bei B:Byte ist es 1, bei Integer z.B. 4).
WriteBuffer erklärt sich doch dann von selbst, nicht wahr?
Du musst übrigens bei einem Filestream keinen Speicherbefehl aufrufen, weil du bereits mit dem Writebefehl Byte für Byte auf die Platte drückst. Das Laden erübrigt sich auch, denn es wird mit jedem Read ein Byte eben abgerufen.
Cu,
Udontknow
elundril - Mi 27.12.06 15:06
ok danke!!
lg el
Horst_H - Mi 27.12.06 16:58
Hallo,
wo Du jetzt fertig bist, kann ich mal etwas anderes zeigen.
Der Schlüssel wird staendig per Zufallsgenerator mit definiertem Startwert permutiert(schon bei der ersten Verwendung. Edit1.text muss eine Zahl sein ).
Wer den Startwert kennt, hat schon gewonnen, also ist die Sicherheit nicht sehr hoch (~31 Bit oder so, bei dem Zufallsgenerator von Delphi) aber die Sache ist recht schnell.
Gruss Horst
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!