// Decompiled by JEB v0.9.0 alpha
public static void rc4_crypt(byte[] arg11, byte[] arg12) {
int v10 = 0x100;
int v5 = arg11.length;
int v0 = arg12.length;
byte[] v6 = new byte[v10];
int v1 = 0;
while(v1 < v10) {
v6[v1] = ((byte)v1);
++v1;
}
int v3 = 0;
v1 = 0;
while(v1 < v10) {
v3 = (v6[v1] + v3 + arg11[v1 % v5]) % 0x100 & 0xFF;
byte v7 = v6[v1];
v6[v1] = v6[v3];
v6[v3] = v7;
++v1;
}
v1 = 0;
v3 = 0;
int v2 = 0;
while(v2 < v0) {
v1 = (v1 + 1) % 0x100 & 0xFF;
v3 = (v6[v1] + v3) % 0x100 & 0xFF;
v7 = v6[v1];
v6[v1] = v6[v3];
v6[v3] = v7;
arg12[v2] = ((byte)(arg12[v2] ^ v6[(v6[v1] + v6[v3]) % 0x100 & 0xFF]));
++v2;
}
} |
/**
* RC4 encryption/decryption routine.
* @param key
* @param data input/output buffer
*/
public static void rc4_crypt(byte[] key, byte[] data) {
int keylen = key.length;
int datalen = data.length;
int i;
int j;
// key scheduling
byte[] sbox = new byte[256];
for(i = 0; i < 256; i++) {
sbox[i] = (byte)i;
}
j = 0;
for(i = 0; i < 256; i++) {
j = ((j + sbox[i] + key[i % keylen]) % 256) & 0xFF;
byte tmp = sbox[i];
sbox[i] = sbox[j];
sbox[j] = tmp;
}
// generate output
i = 0;
j = 0;
int index = 0;
while(index < datalen) {
i = ((i + 1) % 256) & 0xFF;
j = ((j + sbox[i]) % 256) & 0xFF;
byte tmp = sbox[i];
sbox[i] = sbox[j];
sbox[j] = tmp;
byte k = (byte)(sbox[((sbox[i] + sbox[j]) % 256) & 0xFF]);
data[index] ^= k;
index++;
}
} |