Для тех, кто сталкивается с такой же проблемой:
String salt = KeyGenerators.string (). GenerateKey ();
Каждый вызовэта строка в соответствии с документами:
Создает StringKeyGenerator, который шестнадцатерично кодирует ключи SecureRandom длиной 8 байтов.Шестнадцатеричная строка имеет длину keyLength * 2 символа.
Таким образом, соль случайна, например: plain : "hello" password :«пароль» соль : «e606bfd5cf9f198e»
в зашифрованном виде : «60e0e953841ca708b74ac657735a2236076f0a614ec85548d163fadf91e2be8f *, затем 10 *, 1064метод генерирует другую (случайную) соль, поэтому TextEncryptor.decrypt (String encrypted) не может правильно расшифровать, потому что соль не совпадает.
Encryptors.queryableText(Пароль CharSequence, соль CharSequence)
Создает шифратор для запрашиваемых текстовых строк, который использует стандартное шифрование на основе пароля.Использует 16-байтовый вектор инициализации "все ноль", поэтому шифрование одинаковых данных приводит к тому же результату шифрования.Это сделано для того, чтобы можно было запрашивать зашифрованные данные.Зашифрованный текст в шестнадцатеричном формате.
CryptoUtil работает для шифрования и дешифрования простых строк, не рекомендуется для паролей , но полезно, например, для ключей API.
public class CryptoUtil {
private static final String salt = "e606bfd5cf9f198e"; //any random generated salt
public static String encrypt(String plain, String password) {
TextEncryptor textEncryptor = Encryptors.queryableText(password, salt);
return textEncryptor.encrypt(plain);
}
public static String decrypt(String encrypted, String password) {
TextEncryptor textEncryptor = Encryptors.queryableText(password, salt);
return textEncryptor.decrypt(encrypted);
}
}