IT基礎・コンピュータの用語一覧へ
このページの目次

ハッシュ関数とは?

最終更新:2026/08/18

3秒でわかる

任意の長さのデータから決まった長さの値を作る関数。同じ入力からは必ず同じ値が出る性質を使い、辞書の高速化や改ざん検知、パスワード保管に使われます。

もう少し詳しく

どういうものか

ハッシュ関数は、どんな長さの入力を与えても、決まった長さの値(ハッシュ値、ダイジェスト)を返す関数です。1 文字でも入力が変われば出力は大きく変わり、出力からもとの入力を復元することは想定されていません。

大事な性質は 3 つあります。同じ入力からは必ず同じ出力が出ること、出力の長さが入力によらず一定であること、そして出力が偏らず散らばることです。

なぜ必要か

用途によって、求める性質が変わります。

データ構造としては、鍵から配列の位置を一瞬で計算するために使います。辞書(Python の dictJavaScriptMap)が要素数によらずおおむね O(1) で引けるのはハッシュ関数のおかげです。

セキュリティの文脈では、ファイルが途中で書き換えられていないかの検証や、パスワードを平文で保存しないための仕組みに使います。データベースが漏れても、ハッシュ値からもとのパスワードを逆算するのは現実的でない、という前提に立っています。

具体例

import hashlib digest = hashlib.sha256("harenohi".encode()).hexdigest() print(digest) # 常に同じ 64 桁の 16 進数 print(hash("harenohi") % 8) # 辞書の格納位置を決める<a href="/glossary/image" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">イメージ</a> # 自作の単純なハッシュ (原理の確認用) def simple_hash(s, size): total = 0 for ch in s: total = (total * 31 + ord(ch)) % size return total print(simple_hash("coffee", 16))

hashlib のような暗号学的ハッシュと、dict が内部で使う高速なハッシュは目的が別物です。

つまずきやすいところ

  • 暗号化と取り違える — 暗号化は鍵で元に戻せますが、ハッシュは戻せません。戻したい情報にハッシュを使うと詰みます

  • 衝突は起きないと思う — 出力の長さが有限なので、異なる入力が同じ値になる衝突は必ず存在します。実装は連鎖法などで衝突を処理しています

  • パスワードを SHA-256 だけで保存する — 速すぎて総当たりに弱く、同じパスワードが同じ値になります。ソルトを足して bcrypt や Argon2 のような遅い関数を使います

  • Python の hash() の値が毎回違うと驚く — 文字列のハッシュは起動ごとにランダム化されており、プロセスをまたいで保存する用途には使えません
  • 似た用語との違い

    用語戻せるか主な用途
    ハッシュ関数戻せない検索、改ざん検知、パスワード保管
    暗号化鍵があれば戻せる通信や保存データの秘匿
    エンコード誰でも戻せるBase64 など形式の変換


    覚え方

    「入れたら二度と出てこない、けれど同じものを入れれば同じ札が出るクローク」と考えます。札(ハッシュ値)を見せ合えば同じ荷物かどうかは分かる、という点が本質です。

    知識のつながり

    サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

    現在地ハッシュ関数IT基礎

    LEARN BY DOING

    この用語を、教材で使ってみる

    直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

    このコースが入っている学習分野

    この用語を扱うコース

    コース

    コンピューターサイエンス入門:理論編

    53レッスン
    コース

    コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB

    135レッスン
    コース

    Python入門:基礎文法編

    74レッスン
    コンピュータサイエンスコースの全編を見る