CONTENT
こんにちは、大阪エンジニアのYです。
今回は「ハッシュ化」について少し紹介したいと思います。
<ハッシュ化とは>
・インターネット上で安全にデータを保管・通信するために開発された技術の1つ
・特定の計算手法に基づいて、元のデータを不規則な文字列に置換する処理を指す
「暗号化」と混同してしまっている人もいるかもしれませんが全くの別物です。
一番の違いは「ハッシュ化は不可逆である」点が挙げられます。
暗号化した文字列は複合処理により元に戻すことが可能ですが、ハッシュ化した文字列は不可逆、つまり元に戻すことはできません。
通信時に使用するパスワードをハッシュ化することにより、万が一パスワードが通信の途中で抜き取られたとしても、パスワードの元の値を割り出すことができず、新たに設定するパスワードを推測されたりすることを防ぐ役割も担います。
開発言語の代表格であるPHPやJAVAでは「ハッシュ化」を提供する仕組みがしっかりと容易されています。
せっかくなので実装の例を紹介します。
(ハッシュ化に関する実装部分だけ抜粋しての紹介です。)
<PHPの場合>
> $str = 'hoge'; // ハッシュ化したい文字列
> $hash_str = hash('sha256', $str);
<JAVAの場合>
> String str = "hoge";
> MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
> byte[] hash_bytes = sha256.digest(str.getBytes());
> String hash_str = String.format("%040x", new BigInteger(1, hash_bytes));
※sha256(SHA-256):SHA-2に分類されるハッシュ関数のひとつで長さが256ビットの値を返します。
SHAとは「Secure Hash Algorithm」の略で「安全なハッシュアルゴリズム」という意味を持ちます。
上記で紹介した方法はあくまでも一例なので他の実装方法も存在しますが、それぞれの言語の標準機能でお手軽にハッシュ化することが可能です。
暗号化やハッシュ化は小難しく思われがちですが、実装に組み込むだけであればそれほど難しいことはありません。
セキュリティ面を考えると必須の技術なので、簡単な実装方法を知っているとどこかで役に立つ・・・かもしれません!
この機会に頭の片隅の記憶に残れば幸いです。