Server Side
public void writeHeader(ISAACCipher cipher, int value) {
int next = cipher.getNextKey();
writeByte(value + next);
}
// Set up the ISAAC ciphers.
long clientHalf = in.readLong();
long serverHalf = in.readLong();
int[] isaacSeed = { (int) (clientHalf >> 32), (int) clientHalf, (int) (serverHalf >> 32), (int) serverHalf };
setDecryptor(new ISAACCipher(isaacSeed));
for (int i = 0; i < isaacSeed.length; i++) {
isaacSeed[i] += 50;
}
setEncryptor(new ISAACCipher(isaacSeed));
Client side
int opcode = inputStream.readByte() & 0xff;
opcode = opcode - decryption.getNextKey()&0xff;
serverSeed = inputStream.readLong();
int[] seed = new int[4];
seed[0] = (int) (Math.random() * 99999999D);
seed[1] = (int) (Math.random() * 99999999D);
seed[2] = (int) (serverSeed >> 32);
seed[3] = (int) serverSeed;
encryption = new IsaacCipher(seed);
for (int i = 0; i < 4; i++) {
seed[i] += 50;
}
decryption = new IsaacCipher(seed);
There’s something wrong with decryption.getNextKey()
This is my first time implementing it so I could’ve made a beginners mistake