Я шифрую некоторые данные с использованием фильтра шифрования logstash и сохраняю зашифрованные данные вasticsearch.Фрагмент кода, используемый для шифрования, выглядит следующим образом:
filter {
cipher {
algorithm => "aes-256-cbc"
cipher_padding => 1
iv_random_length => 16
key => "<32_DIGITS_KEY>"
key_size => 32
mode => "encrypt"
source => "[message]"
target => "[message_enc]"
}
}
Когда я читаю данные из этого индекса эластичного поиска с использованием кода Java и дешифрую их, я получаю такую же случайную строку в Unicode перед моими фактическими данными.Пример случайной строки: «r��1�> <��B9c�M ****» </p>
Я не нашел ничего в своем коде для решения этой проблемы.
Пожалуйста, помогитеЯ в решении этого.
@ gusto2
Java-код для расшифровки данных выглядит следующим образом:
private static final String secretKey = "<32_DIGITS_KEY(SAME-AS-USED-IN-ENCRYPTION)>";
static String encrypt ;
//@PostConstruct
public static String encrypt(String strToEncrypt , byte[] salt)
{
try
{
IvParameterSpec ivspec = new IvParameterSpec(salt);
SecretKeySpec speckKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, speckKey , ivspec);
byte[] encrypted = cipher.doFinal(strToEncrypt.getBytes());
return Base64.encodeBase64String(encrypted);
}
catch (Exception e)
{
System.out.println("Error while encrypting: " + e.toString());
}
return null;
}
public static String decrypt(String encrypted ,byte[] salt) {
try {
IvParameterSpec ivspec = new IvParameterSpec(salt);
SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, keySpec , ivspec);
//return new String(cipher.doFinal(Base64.getDecoder().decode(encrypted)));
byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted));
return new String(original);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public static void main (String args[]){
byte[] IV = new byte[16];
SecureRandom random = new SecureRandom();
random.nextBytes(IV);
final byte[] salt = IV;
String strToEncrypt = "533032715323";
encrypt = encrypt(strToEncrypt , salt);
//encrypt = "w7oA8EdWmFNfBSUX1ZM0ixYU1Zep6tOnqz8b81X24n8=";
System.out.println(encrypt);
String decrpytStr = decrypt(encrypt , salt);
System.out.println(decrpytStr);
System.out.println(decrpytStr.equalsIgnoreCase(strToEncrypt));
}