Шифрование базы данных в Hibernate - PullRequest
1 голос
/ 11 апреля 2011

Как можно зашифровать поля базы данных при использовании гибернации?

Мы разработали продукт, который используют некоторые клиенты, использующие это приложение. Некоторые клиенты спрашивают о шифровании базы данных. Есть ли возможность зашифроватьданные на уровне приложения без дополнительных изменений в коде.

Пожалуйста, дайте мне предложение как можно скорее.

Ответы [ 5 ]

11 голосов
/ 27 ноября 2012

Попробуйте это:

Поместите атрибут в вашу сущность:

private byte[]  encryptedBody;

Используйте этот геттер и сеттеры:

@Column(columnDefinition= "LONGBLOB", name="encryptedBody") 
@ColumnTransformer(
  read="AES_DECRYPT(encryptedBody, 'yourkey')", 
  write="AES_ENCRYPT(?, 'yourkey')")
public byte[]  getEncryptedBody() {
    return encryptedBody;
}

public void setEncryptedBody(byte[]  encryptedBody) {
    this.encryptedBody = encryptedBody;
}

А затем, когда вы извлекаете колонку, используйте:

private final Charset UTF8_CHARSET = Charset.forName("UTF-8");

String decodeUTF8(byte[] bytes) {
    return new String(bytes, UTF8_CHARSET);
}

String s = decodeUTF8(entity.getEncryptedBody());

ВНИМАНИЕ : AES_DECRYPT и AES_ENCRYPT принадлежат MySQL. Если у вас другой движок базы данных, найдите похожие функции.

Надеюсь, это поможет.

3 голосов
/ 11 апреля 2011

Я думаю, что вы ищете колонные трансформаторы. Вы можете найти, как это сделать, в справочнике Hibernate:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-column-read-and-write

Надеюсь, это поможет!

0 голосов
/ 04 июня 2018

Если вам нужно использовать шифр Java, вы можете использовать эту библиотеку. Это приносит новое поле типов для отображения спящего режима.

https://github.com/zubial/hibernate-encrypt

@ #

0 голосов
/ 24 февраля 2017

Как объясняется в этой статье , вы можете использовать аннотацию @ColumnTransformer следующим образом:

@ColumnTransformer(
    read =  "pgp_sym_decrypt(" +
            "    storage, " +
            "    current_setting('encrypt.key')" +
            ")",
    write = "pgp_sym_encrypt( " +
            "    ?, " +
            "    current_setting('encrypt.key')" +
            ") "
)
@Column(columnDefinition = "bytea")
private String storage;

Таким образом, Hibernate сможет зашифровать атрибут сущности, когда вы сохраните или объедините его и расшифруете, когда прочитаете сущность.

0 голосов
/ 14 мая 2015

Вы можете использовать jasypt . Он имеет интеграцию Hibernate, которая позволяет шифровать свойства при сохранении (и расшифровывать при загрузке).

http://www.jasypt.org/hibernate.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...