| Cryptography & Encryption Ver- und Entschlüsselung, Algorithmen, Kryptoanalyse ? Kryptographie in der Praxis. Blowfish, Triple-DES, XOR u.a. |
Diskussion: C++ Code fuer RC4-Verschluesselung im Forum Cryptography & Encryption, in der Kategorie Security Area; Anzeige Beschreibung: Im Gegensatz zu DES hat RC4 eine variable Schlüssellänge. Die Schlüssellänge kann bis zu 2048 Bit (!) betragen. ...
![]() |
| | #1 (permalink) |
| Guest Likes: | Anzeige Beschreibung: Im Gegensatz zu DES hat RC4 eine variable Schlüssellänge. Die Schlüssellänge kann bis zu 2048 Bit (!) betragen. RC4 verschlüsselt immer ein Byte auf einmal. Bei RC4 gibt es eine S-Box S (nochmal zur Erinnerung: eine S-Box ist eine Substitutionstabelle) mit 256 Einträgen der Länge 8 Bit (man sagt auch, die S-Box hat eine Größe von 8 ? 8, d. h. 8 Bit werden ersetzt, 8 Bit erhält man als Ausgabe). Die Einträge in dieser Box reichen von S0 (1. Eintrag) bis S255 (256. Eintrag). Außerdem gibt es zwei 8-Bit große Zähler i und j, die zu Anfang auf 0 gesetzt werden. Bevor man mit RC4 verschlüsseln kann, muss man den Algorithmus initialisieren, in unserem Falle muss die S-Box erstellt werden. Dies geschieht folgendermaßen: Zuerst wird die S-Box linear aufgefüllt: S0 = 0, S1 = 1, ... S255 = 255. Dann wird folgende Schleife durchlaufen: für i von 0 bis 255 j = (j + Si + Ki mod k) mod 256  vertausche Si und Sj nächstes i wobei K der Schlüssel und k die Schlüssellänge ist. Falls der Schlüssel nicht genau 256 Byte lang ist, muss er wiederholt werden, man fängt also wieder bei K0 an. Dies kann man einfach erreichen, indem man eine modulo-Operation durchführt, d. h. i mod Schlüssellänge. So, jetzt wollen wir ein Zufallsbyte erzeugen. Dieses Byte wird mit dem Klartextbyte xor-verknüpft, um das Geheimtextbyte zu erhalten: 1. Erhöhe i um 1 2. Addiere Si zu j 3. Vertausche Si und Sj 4. Setze die temporäre Variable t auf Si + Sj. 5. Gebe St aus Alle Operationen verstehen sich modulo 256, d. h. jedes Ergebnis wird einer modulo-256-Operation unterzogen. Schließlich hat die S-Box ja nur 256 Einträge, d. h. der erste Eintrag ist S0 und der letzte S255. Zur Entschlüsselung xor-verknüpft man das Geheimtextbyte mit dem Zufallsbyte und erhält das Klartextbyte ? Entschlüsselung ist praktisch genau dasselbe wie Verschlüsselung ? xor macht's möglich. Theoretisch könnte man die Bytes auch addieren (modulo 256) statt xor'en, die Entschlüsselung wäre dann aber geringfügig komplizierter. Wir können so viele Schlüsselbytes erzeugen wie wir lustig sind. Um einen Text zu verschlüsseln, brauchen wir so viele Bytes wie der Text lang ist. Bei einem 1.302 Byte langen Text lassen wir uns 1.302 Schlüsselbytes ausgeben, mit denen wir die Klartextbytes per xor verknüpfen. Ebenso bei der Entschlüsselung, da die Ver- und Entschlüsselungs-Funktionen identisch sind ? xor sei Dank! ------------------------------------- Mein Code bis jetzt: Code: string text;
string key;
string RC4(const string &key,const string &text)
{
string sbox[256];
int i,j,k = 0;
k = key.length();
for (i=0;i<=255;i++) //sbox linear auffuellen
{
sbox[i]= i;
}
for (i=0;i<=255;i++)
{
j = (j + Sbox[i] + key[i] mod k) mod 256; //diese Zeile stimmt so noch nicht, wie muss die richtig heissen?
vertausche Sbox[i] und Sbox[j]; //ist damit das xor-en gemeint oder wirklich nur vertauschen?
}
return eingabe;
}
void main()
{
...
ausgabe = RC4(code,eingabe);
txtausgabefeld->SetValue(ausgabe);
...
} wie fuelle ich das key feld bis auf den 256 eintrag auf?, mein code ist naemlich immer 82 zeichen lang. Zweite Frage: schon im code aber nochmal wie geht das mit dem Vertauschen? so:? h = x; x = y; y = h;??? ja oder nein? |
| | #2 (permalink) |
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, hier eine PHP Implementierung: PHP-Code: Der Key wird einfach durch aneinander hängen aufgefüllt, also 'KeyKeyKeyKeyKey...' |
| |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Guest Likes: | och mann.... den code kanns de in der codesammlung posten bitte, hier gehts nur um c++. danke trotzdem |
| | #4 (permalink) |
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, wenn du Probleme hast dies in C++ umzusetzen, dann bist du hier falsch. Dafür ist die Code-Kitchen zuständig. Was du der PHP Implementierung allerdings entnehmen kannst: 1. Wie wird der Key aufgefüllt 2. Was mit dem vertauschen gemeint ist 3. "diese Zeile stimmt so noch nicht, wie muss die richtig heissen?" Das kannst du daraus auch entnehmen 4. "ist damit das xor-en gemeint oder wirklich nur vertauschen?" Das kannst du daraus auch entnehmen. Und PHP unterscheidet sich bei solchen sachen, nur geringfügig von C/C++, so dass es ein leichtes sein sollte, dies in C++ zu übersetzen. Einfach die $-Zeichen entfernen, nachschauen was die 3 enthaltenen PHP-Funktionen und nach dem C++ Äquivalent suchen, fertig. Bist du aber nicht gewillt, selber zu überlegen, was das studieren auch von anders sprachigen Quelltexten einschließt, dann bist du hier eindeutig falsch und solltest lieber bei google nach einer fertigen C++ Implementierung suchen, was aber wahrscheinlich nicht deine Intention ist. |
| |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| vigenere verschluesselung | Virus | Cryptography & Encryption | 6 | 11.06.09 01:48 |
| WLan unter Linux mit gleichzeitiger WEP/WPA verschluesselung | KervyN | Linux/UNIX | 2 | 25.11.08 00:46 |
| code von exe an code von anderen exe hängen? (c++) | <b00n> | Code Kitchen | 14 | 09.07.07 15:43 |
| Codesammlung in verschiedenen Sprachen fuer RC4-Verschluesselung | kmindi | Cryptography & Encryption | 8 | 05.12.06 01:15 |
| Nun 4,50 fuer Kippen... | Chris | Off topic-Zone | 31 | 28.08.03 10:46 |