Вместо использования хеш-функции вы можете использовать симметричный алгоритм шифрования, например, предложенный Spring Security
, из их Crypto Module
, более конкретно их Encryptors class.
Здесьбазовый пример шифрования / дешифрования:
public static void main(String[] args) {
final String salt = UUID.randomUUID().toString().replace("-", "");
TextEncryptor textEncryptor = Encryptors.delux("my-super-secure-password-for-the-encryptor", salt);
final String passwordToBeEncrypted = "my-secure-password-to-be-encrypted";
final String encrypted = textEncryptor.encrypt(passwordToBeEncrypted);
textEncryptor.decrypt(encrypted);
System.out.println(passwordToBeEncrypted.equalsIgnoreCase(textEncryptor.decrypt(encrypted)));
}
Здесь я использую delux
.Согласно их документации:
Создает текстовый шифратор, который использует «более сильное» шифрование на основе пароля.
Имейте в виду, что это очень наивный подход шифрования идешифрования.
Я бы не рекомендовал вам копировать и вставлять это решение в свой производственный код.
Чтобы эта функциональность была готова к работе, вам нужнопароль, предоставленный Encryptors.delux()
для хранения в безопасном месте.Кроме того, вы также хотите использовать другой способ генерации соли для вашего пароля (возможно, соли для каждого нового шифрования пароля) и сохранения ее на потом, где вы захотите расшифровать свой пароль.
Кроме того, вы можетевы не хотите хранить пароль в виде простого текста (String), но сохраняете его как char[]
или byte[]
, но это должно дать начало, с которого вы можете начать.
Существует также другая библиотека, котораяделает то же самое, из Apache, Apache Commons Crypto , который использует те же алгоритмы, что и Spring Crypto
.
Имейте в виду, что вы более безопасны в использовании библиотеки, чем реализуете себя, поскольку при использовании пакета javax.crypto
вам потребуется знать, что вы делаете, и не наносить больше вреда, чем необходимо.
Примечание: вы можете столкнуться с ситуацией, когда ваш jdk ограничен 128 битами.Чтобы воспользоваться 256 битами, убедитесь, что вы добавили Java Cryptography Extension