Zum Inhalt springen

Problem mit RC4 Algorithmus


benedict

Empfohlene Beiträge

Hallo zusammen!

ich bin neu hier und bin ganz angentan von dem Forum.

Jetzt hab ich ein Problem und zwar schreibe ich meine Facharbeit in Informatik über WLAN (WEP, WPA, WPA2). Dafür habe ich mir vorgenommen den RC4 Algorithmus in Java zu implementieren. Leider habe ich jetzt einen Laufzeitfehler (ArrayIndexOutOfBounds in Zeile 41) und ich weiß nicht wo der Fehler in der Implementierung liegt.

Ich wäre euch sehr dankbar wenn ihr den Fehler findet

/**

  *

  * Beschreibung

  * Implementierung des RC4-Algorithmus

  *

  * @version 1.0 vom 02.02.2009

  * Benedict

  */


public class RC4 {

  public static byte[] RC4 (byte[] klar, byte[] key){

   byte S[] = new byte[256];

   byte[] temp = new byte[1];

   byte[] zufallsZeichen = new byte[1];

   byte[] index = new byte[1];

   Integer z;

   Integer i = 0;

   int j = 0;


   for (i = 0; i<=255;i++){

     S[i] = i.byteValue();

   }


   for ( i = 0; i<= 255; i++){

     j = ((j + S[i] + key[i%key.length])%256);

     temp[0] = S[i];

     S[i] = S[j];

     S[j] = temp[0];

   }

     i = j = 0;


     for(int x = 0; x <=klar.length; x++){

      i = (i + 1)%256 ;

      j = (S[i] + j)%256; 

      temp[0] = S[i];

      S[i] = S[j];

      S[j] = temp[0];

      z = ((S[i] + S[j])%256);

      zufallsZeichen[0]= z.byteValue();

      index[0] = i.byteValue();

      char k = (char)S[z];

      S[x]=(byte)(k^index[0]);



     }


   return S;

  }

  public static void main(String[] args) {

    String code = "";

    String klar = "Hallo";

    String key = "Test";

    byte[] klartext = new byte[256];

    byte[] keytext = new byte[256];

    byte[] str = new byte[256];


    keytext = key.getBytes();

    klartext = klar.getBytes();

    str = RC4(klartext,keytext);

    for (int q = 0; q<str.length;q++){

      int ascii = str[q];

      System.out.println(ascii);

      char zeichen = (char)ascii;

      code = code + zeichen;

    }

    System.out.println(code);


  }

}

Viele Grüße und schon ein Mal Danke

Benedict

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die schnellen Antworten. Das Problem mit dem Laufzeitfehler wäre soweit behoben.

Um aus dem byte Array wieder einen Text zusammen zu setzen muss ich das ganze ja wieder als integer konvertieren und dann als char wieder ausgeben. Problem ist jetzt das es negative Zahlen gibt. Das hängt wohl mit dem Zahlenkreis zusammen. Aber wie bekomme ich jetzt den richtigen ASCII Code???

Viele Grüße

Benedict

Link zu diesem Kommentar
Auf anderen Seiten teilen

weil du bei dieser schleife wohl davon ausgehst, dass der größte Index im array den wert array.length hat. Aber da java-Arrays im Index bei 0 beginnen ist der größte index array.length-1.

Die schleife müsste also eigentlich so aussehen um alle Einträge im Array durchzugehen:

 for(int x = 0; x < klar.length; x++){

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

so hab mich noch mal dran gesetzt und bin jetzt scheinbar ein wenig weiter. Habe ein paar Dinge geändert wie man unschwer erkennen kann.

leider klappt es immer noch nicht richtig. vielleicht habt ihr ja eine idee woran es liegen könnte.


public class RC4 {

  public static StringBuffer Verschluesseln(StringBuffer klar, StringBuffer key){

    short[] Sbox = new short[256];

    short[] Sbox2 = new short[256];

    char temp;

    short k, ver;

    int j = 0;

    for (short i = 0; i <= 255; i++){

      Sbox[i] = i;

    }

    if (key.length() > 0){

     for(int i = 0; i <= 255; i++){

       if(j == key.length()){

         j = 0;

       }

       Sbox2[i] = (short)key.charAt(j++);

     }

    }


    for (short i = 0; i <= 255; i++){

     j = (j + Sbox[i] + Sbox2[i])%256;

     temp = (char)Sbox[i];

     Sbox[i] = Sbox[j];

     Sbox[j] = (short)temp;

    }


    int i,t;

    i = j = 0;

    for (short x = 0; x<=klar.length()-1;x++){

      //Inkrement von i

      i = (i+1)%256;

      //Inkrement von j

      j = (j + Sbox[i]) % 256;


      temp = (char)Sbox[i];

      Sbox[i] = Sbox[j] ;

      Sbox[j] = (short)temp;


      t = ( Sbox[i] + Sbox[j]) % 256 ;


      k = Sbox[t];


      ver = (short)(Sbox[x]^k);


      klar.setCharAt(x, (char)(klar.charAt(x) ^ k));


    } return klar;

  }

  public static void main(String[] args) {

   StringBuffer klarText = new StringBuffer("TEST");

   StringBuffer keyText = new StringBuffer("key");

   System.out.println(Verschluesseln(klarText, keyText));

   StringBuffer lsg = new StringBuffer(Verschluesseln(klarText, keyText));

   System.out.println(Verschluesseln(lsg,keyText));

  }

}


Schon mal danke für eure Hilfe!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

leider klappt es immer noch nicht richtig. vielleicht habt ihr ja eine idee woran es liegen könnte.

Naja, ich weiß nicht, was nicht klappt. Vielleicht solltest Du beschreiben, was Du erwartest und was Du bekommst. Ich bekomme die Klasse kompiliert und ausgeführt und erhalte zwei Zeilen Ausgabe auf der Shell.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ach so. Ich kenne den Algorithmus jetzt nicht und habe auch keine Zeit, mich einzulesen. Aber Du verwendest oft den Datentyp short. Ein beliebter Fehler ist, zu vergessen, dass short ein signed Datentyp ist (wie fast alle anderen primitiven Zahl-Datentypen in Java außer char auch). Vielleicht liegt da der Fehler

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...