Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Cryptography & Encryption Ver- und Entschlüsselung, Algorithmen, Kryptoanalyse ? Kryptographie in der Praxis. Blowfish, Triple-DES, XOR u.a.

C++ Code fuer RC4-Verschluesselung

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. ...

Thema geschlossen
Alt 04.12.06, 19:28   #1 (permalink)
kmindi
Guest
 
Likes:
Standard C++ Code fuer RC4-Verschluesselung

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
&nbspvertausche 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);
...
}
Meine Frage jetzt:
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?
 
Alt 04.12.06, 19:47   #2 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Hallo,
hier eine PHP Implementierung:
PHP-Code:
<?php
function RC4($key$data) { //encrypt and decrypt $data with the key in $keyfile with an rc4 algorithm
   
$pwd $key;
   
$pwd_length strlen($pwd);
   
$key = array();

   
//Key auffüllen
   
for ($i 0$i 256$i++) {
      
$key[$i] = ord($pwd{$i $pwd_length});
      
$sub[$i] = $i;
   }

   
//Substituion-Box vorbereiten
   
for ($i $x 0$i 256$i++) {
      
$x = ($x $sub[$i] + $key[$i]) % 256;

      
//$sub[$i] swap $sub[$x]
      
$temp_swap $sub[$i];
      
$sub[$i] = $sub[$x];
      
$sub[$x] = $temp_swap;
   }

   
//Text verschlüsseln
   
for ($a $j $i 0$i strlen($data); $i++) {
      
$a = ($a 1) % 256;
      
$j = ($j $sub[$a]) % 256;

      
//$sub[$a] swap $sub[$j]
      
$temp $sub[$a];
      
$sub[$a] = $sub[$j];
      
$sub[$j] = $temp;

      
$k $sub[(($sub[$a] + $sub[$j]) % 256)];
      
$Zcipher ord($data{$i}) ^ $k;
      
$Zcrypt .= chr($Zcipher);
   }
   return 
$Zcrypt;
}

//Usage:
$text "Hallo Welt";
$pw "geheim";

//Verschlüsseln
$geheimtext RC4($pw$text);

//Entschlüsseln
$klartext RC4($pw$geheimtext);

echo 
$klartext;
?>

Der Key wird einfach durch aneinander hängen aufgefüllt, also 'KeyKeyKeyKeyKey...'
Elderan ist offline  
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 04.12.06, 20:07   #3 (permalink)
kmindi
Guest
 
Likes:
Standard

och mann.... den code kanns de in der codesammlung posten bitte, hier gehts nur um c++. danke trotzdem
 
Alt 04.12.06, 20:14   #4 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

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.
Elderan ist offline  
Thema geschlossen
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Security Area » Cryptography & Encryption » C++ Code fuer RC4-Verschluesselung
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ä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


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 57 58 59 60 61