[英]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.