GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Checksum_002fHash.html ・ emacs-doc.conao3.com

33.26 チェックサム/ハッシュ

Emacsには、暗号学的ハッシュを計算するための機能が標準で備わっています。暗号学的ハッシュ、あるいはチェックサムとは、データ(例えばテキストの一塊)のデジタル指紋のようなものであり、そのデータが改変されていないことを確認するために利用できます。

Emacsは、MD5、SHA-1、SHA-2、SHA-224、SHA-256、SHA-384、SHA-512、SHA3-224、SHA3-256、SHA3-384、SHA3-512といった、いくつかの一般的な暗号学的ハッシュアルゴリズムをサポートしています。MD5はこれらのアルゴリズムの中で最も古く、ネットワーク経由で送信されるメッセージの完全性を検証するためのメッセージダイジェストとして一般的に使用されています。MD5とSHA-1は衝突耐性がありません(つまり、同じMD5またはSHA-1ハッシュ値を持つ異なるデータをあえて設計することが可能です)。そのため、セキュリティに関連する用途にこれらを使用すべきではありません。セキュリティ関連のアプリケーションでは、SHA-2(例:sha256 や sha512)やSHA-3(例:sha3-256 や sha3-512)など、他のハッシュタイプを使用してください。

関数: secure-hash-algorithms

この関数は、secure-hash が使用できるアルゴリズムを表すシンボルのリストを返します。

関数: secure-hash algorithm object &optional start end binary

この関数は object に対応するハッシュを返します。引数 algorithm は、どのハッシュを計算するかを指定するシンボルで、md5、sha1、sha224、sha256、sha384、sha512、sha3-224、sha3-256、sha3-384、sha3-512 のいずれかです。引数 object にはバッファまたは文字列を指定する必要があります。

オプション引数 start および end は、メッセージダイジェストを計算する object の範囲を指定する文字位置です。これらが nil であるか、あるいは省略された場合は、object 全体に対してハッシュが計算されます。

引数 binary が省略されているか、あるいは nil である場合、関数はハッシュのテキスト形式を通常の Lisp 文字列として返します。binary が nil 以外である場合、ハッシュをバイナリ形式で、ユニバイト文字列に格納されたバイト列として返します。返される文字列の長さは 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バイト)。
  • sha3-224の場合:56文字(binaryがnilでない場合は28バイト)。
  • sha3-256の場合:64文字(binaryがnilでない場合は32バイト)。
  • sha3-384の場合:96文字(binaryがnilでない場合は48バイト)。
  • sha3-512の場合:128文字(binaryがnilでない場合は64バイト)。

この関数は、objectのテキストの内部表現(テキスト表現を参照)から直接ハッシュ値を計算するわけではありません。代わりに、符号化方式(符号化方式を参照)を用いてテキストを符号化し、その符号化されたテキストからハッシュ値を計算します。objectがバッファである場合、使用される符号化方式は、そのバッファのテキストをファイルに書き出す際にデフォルトで選択される方式となります。objectが文字列である場合は、ユーザーが指定した優先の符号化方式が使用されます(GNU Emacs ManualのRecognize Codingを参照)。

関数: md5 object &optional start end coding-system noerror

この関数はMD5ハッシュを返します。ほとんどの用途において、algorithm引数にmd5を指定してsecure-hashを呼び出すのと同等であるため、実質的には非推奨となっています。object、start、およびend引数の意味はsecure-hashと同様です。この関数は32文字の文字列を返します。

coding-system が nil 以外の場合、テキストのエンコードに使用するコーディングシステムを指定します。省略された場合や nil の場合は、secure-hash と同様にデフォルトのコーディングシステムが使用されます。

通常、md5 は、指定されたまたは選択された符号化方式でテキストを符号化できない場合にエラーを示します。ただし、noerror が nil 以外の場合は、代わりに raw-text 符号化を暗黙的に使用します。

関数: buffer-hash &optional buffer-or-name

buffer-or-name のハッシュ値を返します。nil の場合は、デフォルトで現在のバッファが対象となります。secure-hash とは異なり、この関数はエンコーディング体系に関わらず、バッファの内部表現に基づいてハッシュ値を計算します。そのため、同一の Emacs で動作している 2 つのバッファを比較する場合にのみ有用であり、異なる Emacs バージョン間で同一のハッシュ値が返される保証はありません。大規模なバッファに対しては secure-hash よりもある程度効率的であり、メモリ消費量も増加しないはずです。

関数: sha1 object &optional start end binary

この関数は、secure-hash を次のように呼び出すのと同等です。

(secure-hash 'sha1 object start end binary)

binary が nil の場合は 40 文字の文字列を、それ以外の場合は 20 バイトのユニバイト文字列を返します。