LoginSignup
13
10

More than 5 years have passed since last update.

Base64変換後のバイト数について

Last updated at Posted at 2018-05-23

顧客データを暗号化したときの備忘録です。

カラムの文字数制限について

Base64で暗号化をすると平文より文字数が増えます。
そのため既存のDBのカラム定義だと保存できない問題がありました。

暗号化アルゴリズムについて

対応としてはDBのカラム定義(VARCHAR)の長さを増やして対応します。
使っている暗号化アルゴリズムはBlock Cipher(AES 256 Encryption)であり、Block Cryptionは入力された値の長さによりブロック分けして暗号化するので暗号化された値の文字数はそのブロックにより異なります。

Base64変換後の文字列サイズは以下の式で求まります。参考: BlockCryption

(変換後のバイト数) = (文字数 * バイト数) + ブロック数 - MOD(文字数 * バイト数, ブロック数)

以下公式内の変数の説明。

  • 文字数:入力文字列の文字数。
  • バイト数:一般的に文字のサイズは以下の通り。
UTF-8 バイト数
英文字 2 Bytes
ひらがな or カタカナ 3 Bytes
漢字 3 or 4 Bytes
  • ブロック数:入力文字列によりブロックが設定される(文字数1〜7→16,文字数8~15→32, etc.)

凡例

名前の入力値は50文字で上限を掛けているのでこの値で計算してみます。

アルファベット ひらがな or カタカナ 漢字
文字数 50 50 50
バイト数(Byte) 2 3 4
ブロック数 16 16 16
(50*2)+16-MOD(50*2,16) (50*3)+16-MOD(50*3,16) (50*4)+16-MOD(50*4,16)
サイズ(Byte) 152 216 280

結論

以上から50文字上限なら280のバイト数を設定すればよさそうです。
他のカラムについても同様に計算ができます。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10