ハッシュ・暗号化・エンコードの違い

データを hash すべきか、encrypt すべきか、encode すべきかを理解し、これらの仕組みが互いに置き換え可能でない理由を説明します。

hash、encryption、encoding はすべてデータを変換しますが、解決する問題は異なります。混同すると、弱いパスワード保存、壊れた連携、混乱したデバッグセッションにつながります。

短く言えば、指紋には hash、秘匿には encrypt、トランスポートには encode です。

Hashing は指紋を作る

hash 関数は入力を固定長の digest に変換します。入力の小さな変更は出力を大きく変え、良い暗号学的 hash は一方向性を持つよう設計されています。

hash を使う場面:

  • ファイル整合性チェック。
  • キャッシュキーとコンテンツ指紋。
  • 元データを保存せずに比較する。
  • パスワード保存(ただし平文 MD5 や SHA-256 ではなく、password hashing アルゴリズムと salt を組み合わせた場合のみ)。

Hash Generator は、デバッグ中に期待 digest と実際の digest を比較するときに便利です。

Encryption は秘匿を保護する

encryption は鍵があれば復元可能です。元のデータを後で復元する必要があるが、信頼できる当事者だけが復元できる場合に適したツールです。

encryption を使う場面:

  • 保存された secret。
  • プライベートメッセージ。
  • 機密データベースフィールド。
  • 安全なチャネル経由で送るデータ。

secret key なしに誰でも値をデコードできるなら、それは encryption ではありません。

Encoding は表現を変える

encoding はデータを特定の構文やトランスポートチャネルに合わせます。通常、secret なしで復元可能です。

encoding を使う場面:

  • バイト列の Base64 テキスト表現。
  • query parameter 向け URL percent encoding。
  • マークアップ内テキスト向け HTML entity escaping。
  • JSON 文字列 escaping。

encoding はセキュリティ境界ではありません。Base64 は一瞥では意味が読めなく見えますが、値を保護するものではありません。

適切な仕組みの選び方

解決すべき問題を問いかけます。

  • 2 つのファイルが同一か確認したい? → Hash。
  • secret を保存して後で復元したい? → Encrypt。
  • テキストを URL 内に安全に置きたい? → Encode。
  • パスワードを保存したい? → 一般的な encryption や平文 SHA ではなく、password hashing 方式を使う。

混乱を素早くデバッグする

値が読めないときは、文脈を確認します。URL-safe 文字は URL encoding や Base64URL を示唆するかもしれません。固定長の hex 文字列は hash かもしれません。metadata、IV、key ID を含む値は encrypt されているかもしれません。

良いデバッグは、変換を正しく名前付けすることから始まります。その後、適切なツールは通常明らかになります。

関連ツール

この記事で使うツール

ハッシュ生成ツールhash / hmac / md5Base64 エンコード / デコードbase64 / encode / decodeURL エンコード / デコードurl / uri / encode

関連コース

ハッシュ コースこの暗号学的ハッシュコースで学ぶ内容を整理します。Base64 コースBase64 の仕組み、padding、URL セーフ形式、よくあるミスを学びます。URL エンコード コースpercent-encoding、query string、encodeURI と encodeURIComponent の違いを学びます。

記事一覧へ戻る