Шифрование пароля с помощью Google/ Tink
Добрый день, я использовал Google/ Tink для шифрования пароля для хранения в БД, используя следующие шаги:
// 1. Generate the key material.
KeysetHandle keysetHandle =
KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);
// 2. Get the primitive.
Aead aead = AeadFactory.getPrimitive(keysetHandle);
// 3. Use the primitive to encrypt a plaintext,
byte[] ciphertext = aead.encrypt(plaintext, aad);
Он в основном преобразует пароль в байты, но когда я преобразую его в строку для хранения в БД, он хранит зашифрованный пароль в следующем формате: -�@~�k�D߶{�
,
Но я хочу хранить пароль в формате, как 11As7737Cs9ue9oo09
используя тинк шифрование.
Есть ли способ сделать это?
1 ответ
Маниш, возможно, вы не захотите шифровать пароли. Вы хотите их хешировать. Tink пока не поддерживает хеширование паролей, но мы можем добавить поддержку, если будет достаточно интереса.
Не могли бы вы подать запрос на функцию на https://github.com/google/tink/issues/new?
Я согласен со всеми здесь, что вы не должны хранить пароли в открытом виде.
Тем не менее, чтобы ответить на ваш вопрос, потому что я думаю, что это общая проблема, когда вы получаете какой-то зашифрованный текст, а строка не читается. Скажем, вы хотите хранить данные без пароля в зашифрованном виде и читать. Вам нужно было бы Base64 кодировать ваш зашифрованный текст.
Когда вы извлекаете данные в кодировке Base64 обратно из базы данных, вам нужно будет Base64 декодировать строку и затем запустить ее в процессе расшифровки. Опираясь на ваш пример,
String readable = new String(java.util.Base64.getEncoder().encode(cipherText));
byte[] bytesToDecrypt = java.util.Base64.getDecoder().decode(readable.getBytes());