Я работаю над шифрованием с помощью DES, который использует 56-битный эффективный ключ (после отбрасывания младших значащих бит) для шифрования 64-битного открытого текста. Я хочу установить первые 20 битов ключа на случайные биты, а последние 36 битов на 0. Я пытался сделать это с BitSet
, где я установил массив с 64 битами, где все значения ложны в начале. Затем я установил временный массив из 20 битов и пытался использовать bitset.set(Random.nextInt(n), true)
в цикле for, который начинается с 0-20. Идея состоит в том, что я получаю ровно 20 случайных битов.
Чтобы отбросить младший значащий бит, у меня есть цикл for, в котором я перехожу от 0 до 20. В этом цикле for у меня есть оператор if, который отбрасывает каждый 8-й элемент для первых 20 элементов
static BitSet key1 = new BitSet(64);
static BitSet key2 = new BitSet(64);
public static void generate() {
BitSet temp1 = new BitSet(20);
BitSet temp2 = new BitSet(20);
Random r = new Random();
for (int i = 0; i < 20; i++) {
temp1.set(r.nextInt(60), true);
temp2.set(r.nextInt(60), true);
}
for (int i = 0; i < 20; i++) {
key1.set(i, temp1.get(i));
key2.set(i, temp2.get(i));
}
System.out.println(k1temp);
for (int i = 0; i < temp1.length(); i++) {
if (i % 8 == 0) {
key1.clear(i);
key2.clear(i);
}
}
}
Итак, у меня проблема в том, что мой BitSet
не всегда состоит из 20 элементов, что приводит к тому, что ключ, который я генерирую, неверен. Я несколько раз просматривал код, но не вижу, что не так.
EDIT:
Под первым и последним я подразумеваю, что первые биты являются старшими значащими битами, а последние - младшими значащими битами.