我必须将 AES-GCM 加密数据存储在数据库中。目前我们使用 MariaDB,但可以选择稍后更改为 PostgreSQL。(但也应考虑其他数据库)
既然算法实际上并不加密字符串,而是字节,加密算法的输出也是一个字节[],为什么不将加密后的数据直接存储在二进制列中呢?
对于 MariaDB/MySql 这将是一个BLOB
. 我知道 PostgreSQL 甚至有一个用于加密数据的首选特殊数据类型,称为bytea
.
然而,大多数程序员似乎将加密字节编码为 Base64,并将生成的字符串存储在VARCHAR
.
Base64 的编码和解码对我来说似乎违反直觉。它使数据最多延长 50%,并且每次都是一个额外的步骤。它还强制数据库在存储和检索数据时应用字符编码。这是一个额外的步骤,肯定会花费额外的时间和资源,而我们真正需要存储的只是一些字节。加密数据在任何字符编码中都毫无意义。
问题:
是否有充分的理由支持或反对将加密数据作为二进制存储在数据库中?是否存在安全性、数据完整性或性能方面的原因,我可能不想将加密数据直接存储为二进制文件?