Шифрование
Ormar предоставляет способ шифрования только полей в базе данных. Доступные бэкэнд шифрования позволяют как одностороннее шифрование (HASH), так и двунаправленное шифрование/дешифрование (FERNET).
!!!Обратите внимание, что для работы шифрования необходимо установить дополнительный пакет шифрования.
1 | |
!!! Внимание: добавление encrypt_backend приводит к изменению типа столбца базы данных на ТЕКСТ, что необходимо отразить в db путем переноса или изменения вручную.
Определение шифрования полей
Для шифрования поля необходимо передать как минимум параметры encrypt_secret и encrypt_backend.
1 2 3 4 5 6 7 8 9 10 11 12 | |
!!!предупреждает, что вы можете зашифровать все типы полей, кроме столбца primary_key и серии выключений (ForeignKey и ManyToMany). Проверьте данные бэкэнда для получения дополнительной информации.
Доступные серверные
Хаш
HASH-это односторонний хеш (например, пароль), который никогда не расшифруется при получении.
Чтобы настроить его, передайте соответствующие значения на задней стороне.
1 2 3 4 | |
Обратите внимание, что, поскольку этот бэкэнд никогда не расшифрует сохраненное значение, он работает только для строковых полей. Используемый хеш является sha512, поэтому длина поля должна быть>=128.
Обратите внимание, что в бэнде HASH можно фильтровать по полному значению, но фильтры, такие как contains, не будут работать, поскольку сравниваются значения шифрования
!!!note Обратите внимание, что предоставленный encrypt_secret сначала хеширует себя и используется в качестве соли, поэтому вам нужно заново создать этот шаг для сравнения с сохраненной строкой. order_by не будет работать, так как сравнение зашифрованных строк, поэтому вы не можете надежно сортировать их.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Финетт
FERNET-это двойной интерфейс шифрования/дешифрования
Чтобы настроить его, передайте соответствующие значения на задней стороне.
1 2 3 | |
Значения шифруются по пути к терминалу базы данных и дешифруются при выходе. Доступны для всех типов, так как возвращаемое значение интерпретируется как соответствующий тип Python.
!!! Обратите внимание, что в бэкэнде FERNET вы полностью теряете возможность фильтрации, так как часть зашифрованного значения является временной меткой. То же самое относится и к order_by, так как сравниваются зашифрованные строки, поэтому вы не можете надежно сортировать их.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Пользовательский бэкэнд
Если вы хотите поддерживать другие типы шифрования (AES), вы можете предоставить свой собственный EncryptionBackend.
Чтобы настроить бэкэнд, вам нужно подкласс класса ormar.fields.EncryptBackend и предоставить ему необходимый бэкэнд.
Пример виртуального бэнда (без выполнения каких-либо действий) может выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 | |
Для использования этого бэкэнда установите для encrypt_backend значение CUSTOM и укажите его в качестве параметра с помощью encrypt_custom_backend.
1 2 3 4 5 6 7 8 9 | |