У меня проблемы на руках. Я создал сервис AES для шифрования / дешифрования конфиденциальной информации. Ключ AES генерируется случайным образом с использованием Java SecureRandom
. У меня есть защищенный файл, в котором хранится начальное число, и после вызова службы начальное число заполняется в класс Secure Random.
Чтобы убедиться, что это работает, у меня есть следующая логика:
private boolean secureRandom(final String seed) {
SecureRandom sr1 = new SecureRandom(seed.getBytes(UTF8_CHARSET));
SecureRandom sr2 = new SecureRandom(seed.getBytes(UTF8_CHARSET));
//Two secure random with the same seed should generate the same results
boolean secureRandomWorks = sr1.nextLong() == sr2.nextLong();
if (!secureRandomWorks) {
System.err.println("Secure random not supported. Defaulting to old key");
}
return secureRandomWorks;
}
Идея в том, что я должен иметь возможность создавать два безопасных случайных объекта с одинаковым начальным числом, и они оба должны возвращать одно и то же значение при вызове nextLong()
Когда я развертываю свое приложение на машине с Windows, это работает нормально, но когда я развертываю его на машине с RHEL 7, я получаю ошибку.
У меня сложилось впечатление, что до тех пор, пока начальное число одинаково, оба экземпляра всегда будут давать один и тот же результат. Это похоже на случай с Windows, но не тогда, когда я тестировал его на RHEL 7, похоже, что это не так.
Я создал этот простой тест для проверки:
SecureRandom sr1 = new SecureRandom("encryptionKey".getBytes("UTF-8"));
SecureRandom sr2 = new SecureRandom("encryptionKey".getBytes("UTF-8"));
for (int i = 0; i < 1000; i++) {
System.out.println(sr1.nextLong() == sr2.nextLong());
}
И в windows каждый вывод был верным, в то время как в RHEL 7 это было ложно.
Есть какие-нибудь идеи по поводу того, что может заставить RHEL 7 игнорировать семя?