Я работаю над шифрованием с помощью 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 элементов, что приводит к тому, что ключ, который я генерирую, неверен. Я просмотрел код несколько раз, но не могу понять, что не так.
РЕДАКТИРОВАТЬ:
Что я имею в виду под первым и последним, так это то, что первые биты являются старшими битами, а последние - наименее значащими битами.
Random()
в Java, просто передайте 2 ^ 20), а затем сдвиньте влево на 36 бит? Это должно занять около 3 строк кода для реализации. - person Robert Harvey   schedule 19.11.2018r.nextInt(60)
2 x 20 раз, это примерно 33%, что вы получаете (по крайней мере, одно) повторяющееся число изr.nextInt(60)
(с 50%, что это неправильный набор, поэтому вы бы переопределить ранее установленный бит, из-за чего к концу вы пропустите установленные биты. - person xerx593   schedule 06.02.2019