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.
Эта функция возвращает хеш для объект. Аргумент
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. Она полуустарела, поскольку для большинства
целей она эквивалентна вызову secure-hash с
md5 в качестве аргумента algorithm. Аргументы
объект, start и end имеют то же
значения, что и в secure-hash. Функция возвращает строку из 32
символов.
Если coding-system не равна nil, она
указывает систему кодирования, которую следует использовать для кодирования текста;
если она опущена или равна nil, используется системное
кодирование по умолчанию, как и в secure-hash.
Обычно md5 сигнализирует об ошибке, если текст не может быть
закодирован с использованием указанной или выбранной системы кодирования. Однако,
если noerror не равен nil, она молча использует
кодирование raw-text.
Возвращает хеш buffer-or-name. Если nil,
по умолчанию используется текущий буфер. В отличие от secure-hash,
эта функция вычисляет хеш на основе внутреннего представления буфера, игнорируя
любые системы кодирования. Поэтому она полезна только при сравнении двух буферов,
работающих в одном Emacs, и не гарантирует возврата одинакового хеша между разными
версиями Emacs. Она должна быть несколько эффективнее, чем secure-hash
для больших буферов, и не должна выделять больше памяти.
Эта функция эквивалентна вызову secure-hash следующим образом:
(secure-hash 'sha1 object start end binary)
Она возвращает строку из 40 символов, если binary равен nil,
или однобайтовую строку из 20 байт в противном случае.