В postgreSQL я использую модуль pgcrypto для вызова функции pgp_sym_encrypt (возвращает тип байта) и сохраняю результат в текстовом столбце:
Например, у меня есть тест таблица со столбцом столбец A (текст):
CREATE EXTENSION pgcrypto;
insert into test (columnA) values (pgp_sym_encrypt('test','test'));
Если я запускаю в консоли, результат будет похож на (экранированный двоичный файл):
\303\015\004\007\003\002\022\261B\015\376\235\023\010j\3225\001\244l\253\332\026\037\\Q\305\253\365H\264\222\021\233\345\326\036Ma\346vwq\373\201\303\300\000\303\354\327:\017\020\036Q\201\025\210\364%\215$\017\304Y^_&\267
Если я запускаю в JDBC, результат аналогичен (в шестнадцатеричном формате):
public class Main {
public static void main(String[] args) throws Exception {
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/db", "postgres", "postgres");
Statement stmt = connection.createStatement();
String sql = "insert into test (columnA) values (pgp_sym_encrypt('test','test'))";
stmt.executeUpdate(sql);
connection.close();
}
}
Результат:
\xc30d040703026859a0885a496bc66bd240018d9cbede4805fc5b733afc706d061ae613600962222f008ab2fc4e99cc1c87841e3929833066ba42697784276c49efa67655a399fa9f77264769a42eb7c85e
Если я использую pgp_sym_decrypt для дешифрования, оба дешифруются бегло, но мне интересно, почему результаты в разных форматах. Если я хочу тот же формат, как я могу это сделать?
UPDATE:
Я знаю, что это экранированный и шестнадцатеричный формат, и их можно установить как ответ @Vao Tsun. Но мне интересно, почему, я думал, что они должны использовать тот же формат по умолчанию? Формат переопределения JDBC? Существует ли какая-либо конфигурация для JDBC для этого формата по умолчанию, или мне приходится вызывать оператор set в каждой транзакции?