Мне нужно хранить зашифрованные данные AES-GCM в базе данных. В настоящее время мы используем MariaDB, но с возможностью позже изменить его на PostgreSQL. (однако следует учитывать и другие базы данных)
Так как алгоритм фактически не шифрует строки, а байты, а вывод алгоритма шифрования также является байтом [], почему бы не сохранить зашифрованные данные непосредственно в двоичный столбец?
Для MariaDB / MySql это будет как BLOB
. Я понимаю, что PostgreSQL даже имеет предпочтительный специальный тип данных для зашифрованных данных, называемый bytea
.
Однако большинство программистов, похоже, вместо этого кодируют зашифрованные байты как Base64 и сохраняют полученную строку в VARCHAR
.
Кодирование и декодирование из Base64 кажется мне нелогичным. Это увеличивает длину данных до 50% и каждый раз является дополнительным шагом. Он также заставляет базу данных применять кодировку символов при сохранении и извлечении данных. Это дополнительный шаг, который, безусловно, требует дополнительного времени и ресурсов, в то время как все, что нам действительно нужно сохранить, - это несколько байтов. Зашифрованные данные не имеют смысла ни в какой кодировке символов.
Вопрос:
Есть ли веские основания для или против хранения зашифрованных данных в двоичном формате в базе данных? Есть ли причина безопасности, целостности данных или производительности, по которой я могу не захотеть хранить зашифрованные данные напрямую как двоичные?