import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;
public class RC4 {
public static void main(String[] args) {
String msg = "abcd";
String key = "Tester1234";
byte[] buf = null;
try {
buf = msg.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
}
byte[] jiami = RC4.rc4(key, buf);
String jiamimsg = "";
try {
jiamimsg = new String(jiami, "UTF-8");
System.out.println(jiamimsg);
} catch (UnsupportedEncodingException e) {
}
System.out.println(Base64.encodeBase64String(jiami));
byte[] jiemi = RC4.rc4(key, jiami);
String jiemimsg = "";
try {
jiemimsg = new String(jiemi, "UTF-8");
System.out.println(jiemimsg);
} catch (UnsupportedEncodingException e) {
}
}
private static byte[] rc4(String key, byte[] buf) {
int[] box = new int[256];
byte[] k = key.getBytes();
int i = 0;
int x = 0;
int t = 0;
int l = k.length;
for (i = 0; i < 256; i++) {
box[i] = i;
}
for (i = 0; i < 256; i++) {
x = (x + box[i] + k[(i % l)]) % 256;
t = box[x];
box[x] = box[i];
box[i] = t;
}
t = 0;
i = 0;
l = buf.length;
int o = 0;
int j = 0;
byte[] out = new byte[l];
int[] ibox = new int[256];
System.arraycopy(box, 0, ibox, 0, 256);
for (int c = 0; c < l; c++) {
i = (i + 1) % 256;
j = (j + ibox[i]) % 256;
t = ibox[j];
ibox[j] = ibox[i];
ibox[i] = t;
o = ibox[((ibox[i] + ibox[j]) % 256)];
out[c] = ((byte) (buf[c] ^ o));
}
return out;
}
}