SHA-1哈希生成
使用我们的SHA-1哈希生成工具生成任意字符串输入的SHA-1哈希,确保数据完整性。

SHA-1哈希生成是一款免费工具,可将字符串转换为160位SHA-1哈希,并以40个十六进制字符显示。
SHA-1有什么作用?
SHA-1可根据任意长度的输入生成固定长度的指纹。SHA-1哈希是单向运算,因此摘要中不包含可读的原始文本副本。即使输入只发生很小的变化,也会得到不同的160位结果。
SHA-1由美国国家安全局设计,并由美国国家标准与技术研究院于1995年发布。其名称是Secure Hash Algorithm 1的缩写。尽管名称沿用至今,但SHA-1已不再被认为能够安全抵御碰撞攻击。
当两个不同的输入产生相同摘要时,就出现了SHA-1碰撞。研究人员已经实际演示过SHA-1碰撞,因此不应再将该算法用于数字签名、证书,以及攻击者可能故意篡改内容的其他场景。

如何生成SHA-1哈希?
输入要计算哈希的确切字符串,然后在SHA-1哈希结果字段中查看由40个字符组成的十六进制值。计算在服务器上完成。你的输入会通过HTTPS发送到服务器,但不会被存储。
以下标准示例展示了预期格式,以及输入如何影响结果:
- 输入abc会得到a9993e364706816aba3e25717850c26c9cd0d89d。
- 空字节字符串会得到da39a3ee5e6b4b0d3255bfef95601890afd80709。
- 输入末尾带空格的abc ,得到的哈希与abc不同。
SHA-1处理的是字节,而不是人类可读的字符。空格、标点符号、大写字母和换行符都会影响结果。SHA-1哈希生成会把文本字段中输入的数字当作字符进行哈希,因此123表示1、2、3这三个字符。
对于SHA-1,带重音符号的字符和非拉丁字符必须先编码为字节。如果两个系统使用不同的字符编码或Unicode规范化方式,即使文本看起来完全相同,也可能生成不同的哈希。将本工具的SHA-1结果与其他系统进行比对时,请确认双方采用相同的编码,通常为UTF-8,并使用相同的换行符约定。

SHA-1可以解密或还原吗?
不能。SHA-1哈希无法解密,因为哈希并非加密,也不存在解密密钥。一般来说,通过摘要恢复任意原始输入在计算上仍不可行。
但可预测的输入则不同。攻击者可以针对字典或生成列表中的可能值计算SHA-1哈希,直到找到匹配项。因此,即使摘要本身不能直接还原,也绝不能使用SHA-1存储密码。
碰撞攻击同样不是在解密哈希。它的目标是找到两个摘要相同的不同输入,而这已足以危及对抗性环境中的签名和完整性检查。

SHA-1目前还用在哪些地方?
SHA-1仍用于非对抗性场景中的校验和、重复数据检测,以及需要兼容旧格式的系统。由40个十六进制字符组成的SHA-1表示形式,也存在于历史上的源代码版本控制标识符和归档软件记录中。
- 校验和:如果预期摘要来自可信来源,SHA-1可以检测意外更改。如果攻击者能够同时替换文件及其公布的哈希值,它就无法证明文件完整性。
- 重复数据删除:当威胁模型不考虑故意制造碰撞时,它可以帮助识别表面上相同的记录或文件。如果使用SHA-1的系统不能容忍任何碰撞,还应对底层数据本身进行比较。
- 旧系统兼容:某些数据库、API和文件格式要求提供现有的SHA-1值。满足这类要求是合理的,但新设计应采用当前的算法。
不要直接使用SHA-1处理密码、数字签名、证书创建或签名、安全令牌生成、身份验证,以及防篡改文档记录。
SHA-1的安全现状和替代方案
SHA-1的抗碰撞能力已在密码学层面被攻破,不应再用于新的安全敏感场景。它的160位摘要比常见SHA-2和SHA-3变体生成的摘要更短,但摘要长度本身并不是淘汰它的原因。已被实际证明可行的碰撞攻击才是决定性因素。
对于预期值来自可信来源的校验和,除非规范另有要求,否则请使用SHA-256或SHA-512。经过身份验证的完整性保护需要使用合适的MAC或数字签名方案。SHA-3也是当前可用的算法系列。如果明确要求使用224位SHA-2摘要,可通过SHA-224哈希生成得到这种格式。密码不应使用SHA-1,而应采用Argon2id、scrypt或bcrypt等专用密码哈希函数。
关于SHA-1的常见问题
SHA-1十六进制值使用大写或小写有区别吗?
没有。大写和小写十六进制字母可以表示相同的160位值。不过,如果系统执行区分大小写的文本比较,仍可能将这两个字符串视为不同值,因此请保留该系统要求的格式。
可以用这个工具计算文件的SHA-1吗?
不可以。本工具只对字符串输入进行哈希,不支持文件上传。如需计算文件校验和,请使用本地工具,例如Linux上的sha1sum,或其他能够直接读取文件字节的等效命令。不要将二进制文件内容粘贴到SHA-1哈希生成的文本字段中,因为编码或换行符发生变化都可能改变结果。
HMAC-SHA-1也已经不安全吗?
已公布的SHA-1碰撞攻击不会以相同方式直接攻破HMAC-SHA-1,因为HMAC使用秘密密钥和独立的构造方式。即便如此,新协议通常仍会选择HMAC-SHA-256或其他当前方案,以避免依赖旧技术并规避政策限制。
加盐后,SHA-1可以安全存储密码吗?
不可以。盐值可以防止相同密码产生相同的已存储SHA-1摘要,也能阻碍预计算表攻击,但SHA-1的计算速度对于密码存储来说仍然过快。请使用支持配置工作因子的密码哈希函数,并为每个密码使用唯一的随机盐值。
最后检查
将本工具生成的SHA-1结果与其他哈希进行比较前,请检查输入中是否存在隐藏空格、末尾换行符、字符编码差异或字母大小写变化。只有在现有系统明确要求,或安全要求不涉及抗碰撞能力时,才应使用SHA-1。对于新设计,请为可信校验和选择当前仍具备抗碰撞能力的哈希算法,为消息身份验证选择带密钥的MAC,或采用合适的数字签名方案。