レッスン 2
ハッシュ vs 暗号化 vs エンコード
ハッシュと暗号化、エンコードの違いを学びます。
開発者は ハッシュ、暗号化、エンコード を混同しがちです。3 つともデータを別の表現に変換しますが、解決する問題は異なります。
エンコード: 表現の変換であり、保護ではない
エンコードはデータを転送や保存向けの形式に整えます。Base64 はバイナリを印字可能な ASCII に変換します。エンコードされたテキストを受け取った人は誰でもデコードできます。エンコードは設計上、可逆です。
暗号化: 鍵による秘密保持
暗号化は機密性を守ります。正しい鍵があれば、暗号文から平文を復号できます。鍵がなければ復号は実質不可能であるべきです。暗号化が答えるのは「許可された相手だけが読めるようにするには?」です。
ハッシュ: 指紋であり、秘密ではない
ハッシュは比較と整合性チェックのためのダイジェストを出力します。通常の用途では一方向です。ハッシュが答えるのは「これらのバイト列は既知の指紋と一致するか?」であり、入力をすでに持っている相手からデータを隠すものではありません。
簡単な比較
| 仕組み | 可逆? | 典型的な目的 |
|---|---|---|
| エンコード | はい | 転送 / 表示形式 |
| 暗号化 | はい(鍵あり) | 機密性 |
| ハッシュ | いいえ(実質的) | 整合性 / 比較 |
よくある誤解
チームが機密値を Base64 エンコードしただけで保護されたと考えることがあります。Base64 は暗号化ではありません。同様に、ファイルの MD5 を公開すると他者が整合性を検証できますが、ファイル自体をすでに持っている人の読み取りを止めるわけではありません。