ハッシュ関数
入力が制限された長さの文字列(例えば、電話番号、自動車のナンバー、送り状番号など)で、個々の入力値は独立にかつ一様な確率で発生する場合、ハッシュ関数は個々のハッシュ値にだいたい同じ個数の入力値をマッピングすればよい。例えば、入力 z が 0 から N−1 の範囲の整数、出力 h が 0 から n−1 の範囲の整数で、N が n より大きいとする。するとハッシュ関数としては、h = z mod n ( z を n で割った余り)、h = (z × n) ÷ N (z を n/N 倍して整数に丸めた値)、などの式が考えられる。
ハッシュ関数は非可逆変換であるため、ハッシュ値から元の値を容易には復元できないという特徴がある。そのため、認証サーバは、パスワードをハッシュ化して保存することが推奨される。このようにすれば、サーバ内の認証情報を窃取された場合であっても、キーを知られるリスクを減らすことができる。
ハッシュを使った手法は決定的でなければならない。つまり、ある入力が与えられたとき、生成するハッシュ値は常に同じでなければならない。言い換えれば、数学的な意味で関数になっていなければならない。したがってハッシュ関数は、時刻などに基づいた擬似乱数のような外部パラメータに依存してはならない。また、ハッシュ対象オブジェクトのメモリアドレスが処理中に変化する可能性があるなら(ガベージコレクションが行われるシステムでは変化する可能性がある)、それもパラメータとして利用することはできないが、時にはアドレス変更と同時にハッシュのやり直しを行うこともある。
良いハッシュ関数は、一般に以下のような特性を満たす必要がある。なお、関連する概念(暗号学的ハッシュ関数、チェックサムなど)では要求は異なる。