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

Emacs имеет встроенную поддержку вычисления криптографических хешей. Криптографический хеш или контрольная сумма — это цифровой отпечаток фрагмента данных (например, блока текста), который можно использовать для проверки того, что у вас есть неизмененная копия этих данных.

Emacs поддерживает несколько распространенных алгоритмов криптографического хеширования: MD5, SHA-1, SHA-2, SHA-224, SHA-256, SHA-384 и SHA-512. MD5 — самый старый из этих алгоритмов, и он часто используется в контрольных суммах сообщений для проверки целостности сообщений, передаваемых по сети. MD5 и SHA-1 не устойчивы к коллизиям (то есть возможно намеренно спроектировать разные фрагменты данных, имеющие одинаковый хеш MD5 или SHA-1), поэтому их не следует использовать для чего-либо, связанного с безопасностью. Для приложений, связанных с безопасностью, следует использовать другие типы хешей, такие как SHA-2 (например, sha256 или sha512).

Функция: secure-hash-algorithms

Эта функция возвращает список символов, представляющих алгоритмы, которые может использовать secure-hash.

Функция: secure-hash объект опционально start end binary

Эта функция возвращает хеш для объект. Аргумент algorithm — это символ, указывающий, какой хеш вычислить: один из md5, sha1, sha224, sha256, sha384 или sha512. Аргумент объект должен быть буфером или строкой.

Опциональные аргументы start и end — это позиции символов, указывающие на часть объект, для которой необходимо вычислить контрольную сумму сообщения. Если они равны nil или опущены, хеш вычисляется для всего объект.

Если аргумент 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).

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

Функция: md5 объект опционально start end coding-system noerror

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

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

(secure-hash 'sha1 object start end binary)

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