Emacs 内置支持计算 加密哈希(cryptographic hashes)。 加密哈希,又称 校验和(checksum),是一段数据(例如一段文本)的数字指纹, 可用于校验你所持有的数据副本是否未经篡改。
Emacs 支持多种常用加密哈希算法:MD5、SHA-1、SHA-2、SHA-224、SHA-256、SHA-384 以及 SHA-512。
MD5 是其中最古老的算法,常用于 消息摘要(message digests),以校验网络传输中消息的完整性。
MD5 与 SHA-1 不具备抗碰撞性(即可以刻意构造出不同数据却拥有相同 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,函数返回哈希的 文本形式(text form),为普通 Lisp 字符串。
若 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 文本的内部表示计算哈希(see 文本表示方式)。 相反,它会使用编码系统对文本进行编码(see 编码系统),并从编码后的文本计算哈希。 若 object 为缓冲区,则使用将该缓冲区文本写入文件时默认选用的编码系统。 若 object 为字符串,则使用用户偏好的编码系统(see Recognize Coding in GNU Emacs Manual)。
该函数返回 MD5 哈希。它已半废弃,因为在大多数用途下,等价于以 md5 作为 algorithm
参数调用 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 运行实例中的两个缓冲区,且不保证在不同 Emacs 版本间返回相同哈希。
在较大缓冲区上,它通常比 secure-hash 效率更高,且不会额外分配内存。
该函数等价于如下方式调用 secure-hash:
(secure-hash 'sha1 object start end binary)
若 binary 为 nil,返回 40 字符的字符串;否则返回 20 字节的单字节字符串。