Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Verschlüsselung erklären
xsus - Sa 24.12.11 16:17
Titel: Verschlüsselung erklären
Hey,
kann mir jmd.folgende function erklären?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| function TForm1.encodestr(Str: String; Key: Byte): String; var I: Cardinal; begin Result:=Str; for I:=1 to length(Result) do Result[I]:=Chr(Ord(Result[I]) xor Key); end; |
Ich weiß das ich diese Funktion zum verschlüsseln und gleichzeitig zum entschlüsseln verwenden kann...aber was passiert da genau?
und was mache ich als angabe bei Key?
Viele liebe Grüße und Frohe weihnachten..
Delete - Sa 24.12.11 16:41
Stichwort XOR-Verschlüsselung. Und guck dir mal an, was der boolesche Operator XOR macht bzw. wie eine XOR-Operation auf Bitebene aussieht. Und es ist durchaus hilfreich, wenn man sich das mal mit Papier und Bleistift klar macht.
Tilo - Sa 24.12.11 16:42
Hallo,
Diese Funktion arbeitet nur mit nicht Unicode texten Valide.
Es wird angenommen dass jedes Zeichen als Byte (8 Bit) kodiert ist.
Der erste Parameter ist der zu verschlüsselnde oder zu entschlüsselnde Text. Im zweiten Parameter wird ein Schlüssel übergeben, hier ein Byte (z.B. eine Zahl von 0 bis 255, möglicherweise der Zeichencode eines Zeichens, z.B. ord('A'))
Zuerst wird dem Rückgabestring der Eingabewert zugewiesen.
Als zweites erfolgt eine Iteration über die Zeichenkette
Für jedes Zeichen wird eine XOR (
http://de.wikipedia.org/wiki/XOR) Verknüpfung durchgeführt.
Sind Original und Schlüssel verschieden, so ist das Resultat eine 1, sonst Null.
Bei Beispiel:
Original: 10011100
Key: 11001010
XOR_1: 01010110
Und die Entschlüsselung:
XOR_1: 01010110
Key: 11001010
XOR_2: 10011100
Wie Du siehst ist XOR_2 gleich dem Original.
Diese einfache Funktion funktioniert nur wenn jedes Zeichen genauso lang (binär betrachtet) ist wie der Schlüssel.
Die Funktion kannst Du so verwenden:
Delphi-Quelltext
1:
| Geheimnis:=encodestr('Nicht lesen';ord('C')); |
nettes Weihnachten,
Tilo
(Luckie war schneller)
jaenicke - Sa 24.12.11 17:43
Tilo hat folgendes geschrieben : |
Diese Funktion arbeitet nur mit nicht Unicode texten Valide. |
Wenn du damit meinst, dass die Verschlüsselung bei Unicodetexten so nicht gut ist, hast du Recht. Wenn du damit meinst, dass die Ver- und Entschlüsselung nicht korrekt funktioniert, hast du nicht Recht. ;-)
Für Unicode sollte der Schlüssel vom Typ Word statt Byte sein (und dementsprechend groß), da sonst jeweils nur eines der beiden Bytes der Unicodezeichen verändert wird. Funktionieren tut es aber auch mit Byte.
xsus - Sa 24.12.11 18:53
Wenn ich Memo1.Text:=encodestr(Memo1.Text, ord('C')) verwende, funktioniert es mal und mal nicht..je nach text?
vorhher hatte ich statt ord('C'), 20 verwendet,da ich nicht wusste was da hin muss..war das falsch? ..aufjedenfall hats da besser funktioniert...
LG
jaenicke - Sa 24.12.11 19:10
Was meinst du mit funktionieren? Dass beim Verschlüsseln wieder Buchstaben herauskommen? Das ist nicht der Sinn einer xor-Verschlüsselung. :nixweiss:
Wenn du das willst, musst du eine andere Verschlüsselung benutzen.
Tilo - Sa 24.12.11 20:27
Hallo
Ob Du nun Ord('C') oder 20 als Schlüssel angibst ist egal. Es muss nur eine Zahl zwischen 0 und 255 sein. Ord('C') gibt den ASCII Code von C zurück. Dies ist eine Zahl.
Dass die Funktion nicht immer funktioniert ist klar, da sie die Zeichen binär mit den Schlüssel verarbeitet. Dadurch kann halt aus einem normalen Zeichen ein nicht darstellbares Symbol werden, also alle ASCII Codes unter 31. Dies müsstes Du bei der Darstellung abfangen und diese Symbole durch darstellbare Zeichen ersetzen.
Achtung, Für eine erfolgreiche Entschlüsselung muss Du dir den Text im Hintergrund merken (extra Variable).
xsus - Sa 24.12.11 20:50
mit nicht funktionieren meinte ich, das der text beim entschlüsseln nicht der selbe ist...was soll ich denn anstatt dieser, für eine verschlüsselung verwenden? es soll ja möglichst einfach sein und nur zu demonstration..
jaenicke - Sa 24.12.11 21:53
Die Cäsar-Verschlüsselung ist z.B. sehr einfach. Dabei ersetzt du jeden Buchstaben einfach durch den im Alphabet folgenden und das Z durch das A. Auf diese Weise kommen auch wieder nur Buchstaben heraus. Dafür funktioniert es auch nur mit lateinischen Buchstaben.
xsus - Sa 24.12.11 22:49
Hast du dafür vllt einen Code? :) LG
Delete - Sa 24.12.11 23:05
Ist es denn so schwer danach einfach mal mit Google oder hier im Forum zu suchen?
xsus - Sa 24.12.11 23:30
Hab ja deswegen gefragt :b ....lg
Delete - So 25.12.11 00:13
Was brauchst du denn noch? Du hast doch alle benötigten Suchbegriffe.
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!