Шифрование и Java, метод генерации ключа - какого размера? - PullRequest
0 голосов
/ 03 декабря 2009

Я получил следующее тело метода для генерации ключа для шифрования:

new BigInteger(500, new SecureRandom()).toString(64);

Может кто-нибудь объяснить, каков размер сгенерированного ключа?

Ответы [ 4 ]

0 голосов
/ 03 декабря 2009

Во-первых, как и предполагалось ранее, вы получите IllegalArgumentException, поскольку BigInteger не поддерживает radix 64.

Даже если вы используете допустимое основание, количество сгенерированных символов варьируется, поскольку BigInteger убирает начальные 0 и вы также можете получить знак минус в строке.

Чтобы получить случайные ключи, просто используйте случайные байты напрямую. Скажем, вы хотите 128-битный (16 байт) ключ AES, просто сделайте это,

  byte[] keyBytes = new byte[16];
  new SecureRandom().nextBytes(keyBytes);
  SecretKey aesKey = new SecretKeySpec(keyBytes, "AES");
0 голосов
/ 03 декабря 2009

Ваша строка кода создает 500-битное целое число и, по-видимому, пытается преобразовать его в строку в Base64 - это вызов toString(). Но это не сработает, потому что BigInteger.toString () работает только до базового уровня 36 и по умолчанию равно десятичному. Если вам нужно представление Base64, вы должны использовать сторонний класс, поскольку в стандартном API AFAIK нет кодировщика Base64.

0 голосов
/ 03 декабря 2009

Обычно вы хотите, чтобы ваш ключ шифрования был степенью 2. Значит, возможно, вы имеете в виду 512 бит?

0 голосов
/ 03 декабря 2009

Это безопасное случайное число длиной 500 бит в вашем случае. Взгляните на javadoc конструктора BigInteger (int numBits, Random rnd).

...