Emacsには暗号化ハッシュ(cryptographic hashes)計算用のビルトインのサポートがあります。暗号化ハッシュ、またはチェックサム(checksum)とはデータ断片にたいするデジタルな指紋(fingerprint)であり、そのデータが変更されていないかチェックするために使用できます。
EmacsはMD5、SHA-1、SHA-2、SHA-224、SHA-256、SHA-384、SHA-512のような一般的な暗号化ハッシュアルゴリズムをサポートします。これらのアルゴリズムのうちMD5はもっとも古く、ネットワーク越しに転送されたメッセージの整合性をチェックするために一般的にはメッセージダイジェスト(message
digests)内で使用されています。MD5とSHA-1は‘衝突耐性(collision
resistant)をもたない(同じMD5またはSHA-1のハッシュをもつ異なるデータ片を故意にデザインすることが可能)ので、セキュリティに関連することに使用するべきではありません。セキュリティーに関するアプリケーションではSHA-2
(sha256
やsha512
)のような他のハッシュタイプを使用するべきです。
この関数はsecure-hash
が使用可能なアルゴリズムを表すシンボルのリストをリターンする。
この関数はobjectにたいするハッシュをリターンする。引数algorithmはどのハッシュを計算するかを示すシンボルでmd5
、sha1
、sha224
、sha256
、sha384
、sha512
のいずれか。引数objectはバッファーまたは文字列であること。
オプション引数startとendは、メッセージダイジェストを計算するobject部分を指定する文字位置。これらがnil
か省略なら、object全体にたいしてハッシュを計算する。
引数binaryが省略かnil
なら、通常のLisp文字列としてハッシュのテキスト形式(text
form)をリターンする。binaryが非nil
なら、ユニバイト文字列に格納されたバイトシーケンスとしてハッシュのバイナリー形式(binary
form)をリターンする。リターンされる文字列の長さはalgorithmに依存する:
md5
: 32文字(binaryが非nil
なら16バイト)
sha1
: 40文字(binaryが非nil
なら20バイト)
sha224
: 56文字(binaryが非nil
なら28バイト)
sha256
: 64文字(binaryが非nil
なら32バイト)
sha384
: 96文字(binaryが非nil
なら48バイト)"
sha512
: 128文字(binaryが非nil
なら64バイト)"
この関数はobjectのテキストの内部表現(テキストの表現方法を参照)からハッシュを直接計算しない。かわりにコーディングシステム(コーディングシステムを参照)を使用してテキストをエンコードして、そのエンコード済みテキストからハッシュを計算する。objectがバッファーなら使用されているコーディングが、バッファーのテキストをファイルに書き込むためのデフォルトとして選択される。objectが文字列ならユーザーの好むコーディングシステムが使用される(Recognize Coding in GNU Emacs Manualを参照)。
この関数はMD5ハッシュをリターンする。これはほとんどの目的において、algorithm引数にmd5
を指定してsecure-hash
を呼び出すのと等価であり半ば時代遅れである。引数のobject、start、endはsecure-hash
のときと同じ意味をもつ。この関数は32文字の文字列をリターンする。
coding-systemが非nil
なら、それはテキストをエンコードするために使用するコーディングシステムを指定する。省略またはnil
なら、secure-hash
と同様にデフォルトコーディングシステムが使用される。
md5
は通常は指定や選択されたコーディングシステムを使用してテキストをエンコードできなければエラーをシグナルする。しかしnoerrorが非nil
なら、かわりに黙ってraw-text
コーディングシステムを使用する。
buffer-or-nameのハッシュをリターンする。nil
の場合のデフォルトはカレントバッファー。この関数はsecure-hash
とは対照的にコーディングシステムとは無関係にバッファーの内部表現にもとづいてハッシュを計算する。したがって同一のEmacs上で実行中の2つのバッファーを比較する際にのみ有用であり、異なるバージョンのEmacs間で同じハッシュをリターンする保証はない。これは巨大なバッファーにたいしてsecure-hash
より幾分効果的であり、secure-hash
ほど多くのメモリーを割り当てないはずである。
この関数は以下のようにsecure-hash
を呼び出すことと同じ:
(secure-hash 'sha1 object start end binary)
これはbinaryがnil
なら40文字の文字列、それ以外の場合には20バイトのユニバイト文字列をリターンする。