Есть ли причина, по которой не хранить зашифрованные данные как двоичные в базе данных? - PullRequest
0 голосов
/ 08 мая 2020

Мне нужно хранить зашифрованные данные AES-GCM в базе данных. В настоящее время мы используем MariaDB, но с возможностью позже изменить его на PostgreSQL. (однако следует учитывать и другие базы данных)

Так как алгоритм фактически не шифрует строки, а байты, а вывод алгоритма шифрования также является байтом [], почему бы не сохранить зашифрованные данные непосредственно в двоичный столбец?

Для MariaDB / MySql это будет как BLOB. Я понимаю, что PostgreSQL даже имеет предпочтительный специальный тип данных для зашифрованных данных, называемый bytea.

Однако большинство программистов, похоже, вместо этого кодируют зашифрованные байты как Base64 и сохраняют полученную строку в VARCHAR.

Кодирование и декодирование из Base64 кажется мне нелогичным. Это увеличивает длину данных до 50% и каждый раз является дополнительным шагом. Он также заставляет базу данных применять кодировку символов при сохранении и извлечении данных. Это дополнительный шаг, который, безусловно, требует дополнительного времени и ресурсов, в то время как все, что нам действительно нужно сохранить, - это несколько байтов. Зашифрованные данные не имеют смысла ни в какой кодировке символов.


Вопрос:

Есть ли веские основания для или против хранения зашифрованных данных в двоичном формате в базе данных? Есть ли причина безопасности, целостности данных или производительности, по которой я могу не захотеть хранить зашифрованные данные напрямую как двоичные?

1 Ответ

1 голос
/ 08 мая 2020

(я предполагаю, что этот вопрос скоро будет закрыт как «основанный на мнении», но тем не менее)

Есть ли какие-либо веские причины для или против хранения зашифрованных данных как бинарный в базе данных

Нет. Я не вижу причин против использования правильного типа "blob" (BLOB, bytea, varbinary(max), ....)

Общее практическое правило: используйте тип данных что соответствует данным. Так что BLOB (или аналогичный тип) - правильный выбор.

Использование строк в кодировке base64 может быть оправдано тем, что не все библиотеки (уровни обфускации, такие как ORM) могут правильно работать с «каплями», поэтому люди решили использовать что-то универсально применимое (игнорируя накладные расходы на хранение и обработка).


Обратите внимание, что Postgres 'bytea не является «особым типом для зашифрованных данных». Это тип данных общего назначения для двоичных данных (изображения, документы, музыка c, ...)

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