Как зашифровать столбец в Postgres с помощью Hibernate @ColumnTransformer

Я пытаюсь зашифровать столбец в моей БД prostrgres. Имя столбца - "тест" типа "bytea".

мой код enity ниже,

@ColumnTransformer(
          forColumn="test", 
          read="pgp_sym_encrypt(test::bytea, 'mySecretKey')", 
          write="pgp_sym_decrypt(?, 'mySecretKey')")
private String test;

когда я попытался получить сущность, я получаю зашифрованные данные, как показано ниже. Как получить расшифрованное значение программным способом? Но я получаю фактическое значение, если выполняю запрос postgres select.

  "test": "xc30d04070302474627ea0994ea657bd24401aaa5543862d57524a407e5dbe2ee0f6f0f33ea4f4474f5bc801dca5d32956d41a975505b12ac000f124177bdc2f4507cbfd724d716aaa513ba46f004dfefd3b2b32eb6"
  1. когда я пытаюсь сохранить сущность, я получаю следующее ошибка.

ошибка: столбец "test" имеет тип bytea, но выражение имеет тип характер меняется

1 ответов


вам нужно использовать pgp_sym_encrypt для записи и pgp_sym_decrypt для чтения. Ты поступил наоборот.

@ColumnTransformer(
          forColumn="test", 
          read="pgp_sym_decrypt(test::bytea, 'mySecretKey')", 
          write="pgp_sym_encrypt(?, 'mySecretKey')")
private String test;

на самом деле, мне так понравился ваш вопрос, что я даже написал об этом статью. The пример находится на GitHub и работает как шарм.