Autor |
Beitrag |
xsus
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: Sa 24.12.11 16:17
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..
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: xsus
|
|
Tilo
      
Beiträge: 1098
Erhaltene Danke: 13
Win7 geg. WInXP oder sogar Win98
Rad2007
|
Verfasst: 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 ( 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)
Für diesen Beitrag haben gedankt: xsus
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: BenBE, xsus
|
|
xsus 
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: 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
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
Wenn du das willst, musst du eine andere Verschlüsselung benutzen.
Für diesen Beitrag haben gedankt: xsus
|
|
Tilo
      
Beiträge: 1098
Erhaltene Danke: 13
Win7 geg. WInXP oder sogar Win98
Rad2007
|
Verfasst: 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).
Für diesen Beitrag haben gedankt: xsus
|
|
xsus 
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: 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
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: xsus
|
|
xsus 
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: Sa 24.12.11 22:49
Hast du dafür vllt einen Code?  LG
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 24.12.11 23:05
Ist es denn so schwer danach einfach mal mit Google oder hier im Forum zu suchen?
|
|
xsus 
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: Sa 24.12.11 23:30
Hab ja deswegen gefragt :b ....lg
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 25.12.11 00:13
Was brauchst du denn noch? Du hast doch alle benötigten Suchbegriffe.
|
|