зашифровать пароль, используя этот кодПароль шифрования
public static byte[] encrypt(String password) {
try {
BASE64Encoder be = new BASE64Encoder();
MessageDigest md = MessageDigest.getInstance("sha-512");
md.update(password.getBytes());
return md.digest();
} catch (NoSuchAlgorithmException e) {
}
return null;
}
И если я использую этот код для сравнения паролей работает отлично
if (encrypt(passwordField.getText()).compareTo(encrypt("password")) == 0)
system.out.print("true")
else *false
и я хочу, чтобы скрыть свой пароль, чтобы я использовать консольный результат System.out.println(encrypt("Password"))
для сравнения мой код выглядит следующим образом
if (encrypt(passwordField.getText()).compareTo("5sg7KCrrLgIoRFlXIcwAu9pHyyRTfBd5+buE8EA54Wdua6hXPliNoQUlEOOqCjKp5Vh5riKwwtYh/n"+
"NvwKPoX4uw==") == 0)
system.out.print("true")
else *false
он всегда будет выходной фал se. Я не понимаю, почему. Спасибо за ваше время
Прежде всего, SHA-512 является хеш-функцией, которая не является обратимой. Шифрование, с другой стороны, является обратимым. –
Как вы создали «5sg7KCrrLgIoRFlXIcwAu9pHyyRTfBd5 + buE8EA54Wdua6hXPliNoQUlEOOqCjKp5Vh5riKwwtYh/nNvwKPoX4uw =="? Он не имеет допустимой длины Base64 и поэтому длиннее SHA-512. –
Вы не должны использовать простую хэш-функцию для защиты паролей пользователя. Вам нужно использовать сильную схему хэширования, такую как PBKDF2, bcrypt, scrypt и Argon2. Обязательно используйте высокий коэффициент затрат/итераций. Обычно выбирается стоимость, так что одна итерация занимает не менее 100 мс. Подробнее: [Как безопасно использовать хэш-пароли?] (Http://security.stackexchange.com/q/211/45523) –