繁体   English   中英

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

[英]Resize mySql columns to accommodate encrypted data - how much?

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

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

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

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

这实际上取决于您要使用的操作模式。 AES是具有128位块大小的块密码。 也就是说,128位明文将产生128位密文。

然而...

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

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

您还需要考虑需要先进行一次静脉输液/一次。 通常,这是一个16字节的值,但是GCM和CTR模式可以变化。 我相信默认值是12个字节,但我可能会弄错。

牢记以上几点,并假设您希望加密的任何数据都小于或等于原始255字节的限制,则需要:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM