调整mySql列的大小以适应加密数据 - 多少?

时间:2017-06-25 02:25:55

标签: php mysql encryption

我的mySql数据库使用utf8_general_ci编码。 我的表是InnoDB

CodeIgniter(3.x)用作构建php应用程序的框架。我的计划是使用CodeIgniter(3.x)加密类加密一些数据 增强安全性。

我使用AES-256,加密密钥的长度为32字节(字符)

大多数要加密的列目前的类型为varchar(255)。我正在考虑增加这个值,但我不知道多少。

1 个答案:

答案 0 :(得分:2)

这实际上归结为您打算使用的操作模式。 AES是块密码,块大小为128位。也就是说,128位明文产生128位密文。

...然而

ECB和CBC等操作模式要求输入数据的长度是块大小的倍数。因此,例如,如果您只想加密112位明文,那么您的明文必须首先填充为块大小的倍数(例如,我们添加2个字节的填充)。这通常由AES实现自动完成,但它确实意味着明文的长度在加密时最多可增加16个字节。

CTR和CFB等操作模式将分组密码转换为流密码。流密码不需要填充,因此将112位明文加密为112位密文。

您还需要考虑是否需要预先添加IV / nonce。通常这是一个16字节的值,但GCM和CTR模式可能会有所不同。我相信默认值是12个字节,但我可能会弄错。

记住上述内容,并假设您希望加密的任何数据小于或等于原始的255字节限制,您需要:

  • 对于ECB,将限制增加到256个字节(16个字节的完美倍数)。

  • 对于CBC,将限制增加到256 + 16字节(对于IV)。

  • 对于将AES转换为流密码(CTR,CFB等)的模式,数据量可以相同(255个字节),但您需要为你的现时腾出空间,我认为通常是12个字节。您需要确认一下。