1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| // Simple 32bit swapping
int[] cipher = createCipher(314159265359L); // our seed
int encoded = encode(45, cipher);
int decoded = decode(2162832, cipher);
int[] createCipher(long seed) {
int[] cipher = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
Random randomizer = new Random(seed);
for (int i = 0; i < 32; i++) {
int k = randomizer.nextInt(32);
int swap = cipher[i]; cipher[i] = cipher[k]; cipher[k] = swap;
}
return cipher;
}
int encode(int input, int[] cipher) {
int output = 0;
for (int bit = 0; bit < 32; bit++)
if ((input & (1L << bit)) != 0)
output |= 1L << cipher[bit];
return output;
}
int decode(int input, int[] cipher) {
int output = 0;
for (int bit = 0; bit < 32; bit++)
if ((input & (1L << bit)) != 0)
output |= 1L << indexOf(cipher, bit);
return output;
}
public static int indexOf(int[] array, int value) {
for (int i = 0; i < array.length; i++) if (value == array[i]) return i;
return -1;
} |
Partager