Spec-Zone.ru › Elisp

Контрольная сумма/хеш

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 символа (16 байт, если binary не равен nil).
  • Для sha1: 40 символов (20 байт, если binary не равен nil).
  • Для sha224: 56 символов (28 байт, если binary не равен nil).
  • Для sha256: 64 символа (32 байта, если binary не равен nil).
  • Для sha384: 96 символов (48 байт, если binary не равен nil).
  • Для sha512: 128 символов (64 байта, если binary не равен nil).
  • Для sha3-224: 56 символов (28 байт, если binary не равен nil).
  • Для sha3-256: 64 символа (32 байта, если binary не равен nil).
  • Для sha3-384: 96 символов (48 байт, если binary не равен nil).
  • Для sha3-512: 128 символов (64 байта, если binary не равен nil).

Эта функция не вычисляет хеш непосредственно по внутреннему представлению текста в object (см. раздел Представления текста). Вместо этого она кодирует текст с помощью кодировки (см. раздел Системы кодирования) и вычисляет хеш по закодированному тексту. Если object — буфер, используется кодировка, которая была бы выбрана по умолчанию для записи текста этого буфера в файл. Если object — строка, используется предпочитаемая пользователем кодировка (см. раздел Распознавание кодировки в Руководстве GNU Emacs).

Функция: md5 object &optional start end coding-system noerror

Эта функция возвращает хеш MD5. Она в значительной мере устарела, поскольку для большинства задач эквивалентна вызову secure-hash с md5 в качестве аргумента algorithm. Аргументы 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, и не гарантирует возвращение одинакового хеша в разных версиях Emacs. Для больших буферов она должна быть несколько эффективнее, чем secure-hash, и не должна выделять дополнительную память.

Функция: sha1 object &optional start end binary

Эта функция эквивалентна вызову secure-hash следующим образом:

(secure-hash 'sha1 object start end binary)

Если binary равен nil, функция возвращает строку длиной 40 символов, в противном случае — однобайтную строку длиной 20 байт.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Checksum_002fHash.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API