Posiłkując się wiki zaimplementowałem algorytm RC4 w ten sposób:
private void swap(int i, int j) {
int tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
private void init_key() { //genracja tablicy k
for(int i = 0; i < SIZE; i++) {
k[i] = key.codePointAt(i%key.length());
}
}
private void init() { //generacja tablicy s
for(int i=0; i < SIZE; i++) {
s[i] = i;
}
int j = 0;
for(int i = 0; i < SIZE; i++)
{
j = (j + s[i] + k[i]) % SIZE;
swap(i, j);
}
}
/*
* metody przeciazone.
*/
public String encrypt() { //przeciążona metoda szyfrująca z interfejsu Encryptable.
int i = 0, j = 0, r = 0;
String encryptedText = "";
init_key();
init();
for(int k = 0; k < text.length(); k++) { //szyfrowanie
i = (i+1) % SIZE;
j = (j + s[i]) % SIZE;
swap(i, j);
r = s[(s[i] + s[j]) % SIZE];
encryptedText += (char)(text.codePointAt(k) ^ r);
}
return encryptedText;
}
No i po zamianie zaszyfrowanego tekstu na postać szesnastkową wychodzi mi coś takiego:
klucz = "Key", tekst = "Plaintext", wynik = BBF316E8D940AFAD3, a powinno BBF316E8D940AF0AD3; (no chyba, że wiki się myli)
Tak przyglądam się temu kodowi i jakoś nie mogę znaleźć błędu, może to coś związanego z językiem Java. Jakby komuś chciało się rzucić na to "świeższym" okiem, to był bym wdzięczny...