簡體   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