У меня есть приложение, которое мне нужно слить пароли. Чтобы сгенерировать соли, я решил использовать SecureRandom
. Все работает отлично, когда я нахожусь на своей машине для окон. Затем я попытался запустить свой код на машине на базе Linux (Centos 5), и все сломалось.SecureRandom генерирует значения различной длины
Я изолировал проблему и создал этот тестовый случай:
public static void main(String[] args) {
SecureRandom sr = new SecureRandom();
byte[] saltBytes = new byte[256];
sr.nextBytes(saltBytes);
String salt = new String(saltBytes);
System.out.println(salt.length());
}
В окнах выхода всегда 256, но на моей машине Linux изменение выходного сигнала и никогда не 256. Это, кажется, всегда генерировать соль, меньше, чем 256.
Кто-нибудь знает, почему это происходит?
Решение:
Я только что изменил новую строковую строку new String(saltbytes, "ASCII");
Вы не устанавливаете кодировку String, используйте 'String (byte [] bytes, Charset charset)' constructor. –
Вы не должны пытаться помещать двоичные данные в текстовую строку. Это обычно приводит к путанице. –