Преобразование BitSet в байт [] с тем же представлением - PullRequest
0 голосов
/ 23 ноября 2018

Я работаю над созданием 64-битных ключей для DES, где эффективны только 20 битов, т. Е. Остальные заполнены нулями.Я пытаюсь приблизиться к этому, имея BitSet из 23 битов, где каждый 8-й пропускается (т. Е. Сохраняется как ложь), а остальное определяется как SecureRandom.nextBoolean().Итак, мой BitSet выводит 23 бита, где каждый 8-й является ложным.Причина, по которой я это делаю, заключается в том, чтобы убедиться, что биты четности не являются частью 20-битного эффективного ключа.После этого я пытаюсь преобразовать BitSet, используя Bitset.toByteArray(), что дает мне 3 байта, а затем я дополняю остальные 5 байтов нулями.Однако проблема возникает, когда я пытаюсь преобразовать BitSet в byte[], когда представление перевернуто.

public static byte[] generateDesKey() {
        BitSet temp = new BitSet();
        byte[] zeroByteKey = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
        Random r = new SecureRandom();

        for (int i = 0; i < 64; i++) {
            if (i % 8 != 0 && i < 23) {

                temp.set(i, r.nextBoolean());
            }
        }

          StringBuilder sb = new StringBuilder();
          for( int i = 0; i < temp.length();  i++ )
          {
              sb.append( temp.get( i ) == true ? 1: 0 );
          }

          System.out.println("Bitset " +sb );

        byte[] tempByteKey = temp.toByteArray();

        for (byte b : tempByteKey) {
            System.out.print(Integer.toBinaryString(b & 255 | 256).substring(1));
        }

        for (int i = 0; i < tempByteKey.length; i++) {
            zeroByteKey[i] = tempByteKey[i];
        }

        return zeroByteKey;
    }

Пример вывода:

Bitset 00010100011110010011101 // 23 bits where parity bits are skipped
Converted BitSet to byte[] in binary 101101000000111001011100 // 24 bits where every 8 bits are reversed

Причинапочему, я полагаю, второй вывод равен 24 битам, потому что 23 бита округляются до 3 байтов при преобразовании из BitSet в byte[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...