MySQLのハッシュパスワード保存に適したデータ型とは?MD5・SHA-1の使い方を解説
ハッシュパスワードに適したデータ型
MySQLでハッシュ化されたパスワードを保存する際のデータ型は、使用するハッシュアルゴリズムによって異なります。ハッシュアルゴリズムには「入力データのサイズに依存せず、常に固定長の結果を出力する」という特徴があり、出力は16進数の文字列として得られます。また、UNHEX()関数を使えば、16進数の文字列を半分の長さのバイナリデータに変換できるため、ストレージ容量を節約することも可能です。
代表的なハッシュアルゴリズムと、それぞれに対応する推奨データ型は以下の通りです。
- MD5:CHAR(32) または BINARY(16)
- SHA-1:CHAR(40) または BINARY(20)
- SHA-256:CHAR(64) または BINARY(32)(より高いセキュリティが求められる場合に推奨)
なお、現在ではMD5やSHA-1は衝突耐性の面で安全性が低下しているため、実運用ではSHA-2系(SHA-256など)やbcryptなどのアルゴリズムを採用することが推奨されています。
MD5の使用例
まず、MD5()関数で文字列をハッシュ化してみましょう。
mysql> select MD5('This is a hashed password');
実行結果は以下の通りです。
+----------------------------------+
| MD5('This is a hashed password') |
+----------------------------------+
| e9d4c42db40abbb4724a0047f7e91e67 |
+----------------------------------+
1 row in set (0.03 sec)
次に、CHARACTER_LENGTH()関数を使って、ハッシュ化されたパスワードの文字数を確認します。
mysql> SELECT CHARACTER_LENGTH(MD5('This is a hashed password'));
+----------------------------------------------------+
| CHARACTER_LENGTH(MD5('This is a hashed password')) |
+----------------------------------------------------+
| 32 |
+----------------------------------------------------+
1 row in set (0.04 sec)
このように、MD5によるハッシュ値は32文字であることがわかります。そのため、保存先のカラムにはCHAR(32)またはBINARY(16)を指定します。
SHA-1の使用例
続いて、SHA1()関数を使用した例を見てみましょう。
mysql> select SHA1('This is a hashed password');
実行結果は以下の通りです。
+------------------------------------------+
| SHA1('This is a hashed password') |
+------------------------------------------+
| 4e2e1a39dba84a0b5a91043bb0e4dbef23970837 |
+------------------------------------------+
1 row in set (0.00 sec)
こちらも同様に、CHARACTER_LENGTH()関数で文字数を確認できます。
mysql> SELECT CHARACTER_LENGTH(SHA1('This is a hashed password'));
+-----------------------------------------------------+
| CHARACTER_LENGTH(SHA1('This is a hashed password')) |
+-----------------------------------------------------+
| 40 |
+-----------------------------------------------------+
1 row in set (0.00 sec)
SHA-1によるハッシュ値は40文字となるため、カラムにはCHAR(40)またはBINARY(20)を指定するのが適切です。
まとめ
ハッシュパスワードの保存に使うデータ型は、アルゴリズムごとの出力長に合わせて選択します。MD5ならCHAR(32)、SHA-1ならCHAR(40)が基本となり、UNHEX()関数を活用すればBINARY型で半分のサイズに圧縮して保存できます。セキュリティを重視する場合は、より強度の高いSHA-256以降のアルゴリズムの採用も検討しましょう。
-
C言語のFILEデータ型とは?オペーク型の正体と使い方を解説
FILEデータ型とはC言語でファイルを扱う際には、FILE型のポインタを使用します。つまり、FILEはデータ型の一つです。この型は「オペーク型(不透明型:Opaque datatype)」と呼ばれるもので、内部の実装詳細が隠蔽されています。プログラマはFILEの内部構造を直接操作するのではなく、fopen()やfgets()、fclose()といった標準ライブラリ関数を通じて間接的にファイルを操作します。FILEの具体的な定義は処理系(OSや標準ライブラリ)ごとに異なります。以下は、Ubuntuシステムで使用されているGNU Cライブラリ(glibc)におけるFILEの定義です。Ubuntuに
-
C#で通貨計算に最適なデータ型は?decimal型の特徴と使い方を解説
C#で通貨を扱う際に最も適したデータ型はdecimalです。decimalは128ビットのデータ型であり、金融計算や金額計算向けに設計されています。表現できる値の範囲は約1.0 × 10-28から7.9 × 1028までで、有効桁数は28~29桁に及びます。decimal変数を初期化する際には、リテラルに「m」または「M」のサフィックスを付ける必要があります。 decimal b = 2.1m; 以下の例では、decimal型が取り得る最小値と最大値を表示しています。 サンプルコード using System; namespace DemoApplication{ public cla