免费工具 MD5 加密 / SHA-256 在线生成(哈希生成器)
粘贴一段文字,同时得到它的 MD5、SHA-1 和 SHA-256。可以先去首尾空格、转小写再算,让手机号、邮箱在不同系统里对得上;也可以每行算一个,批量处理一整列数据。全部在浏览器里计算。
- MD5、SHA-1、SHA-256
- 按行批量哈希
- 本地计算,不上传
输入文本,生成哈希值
边输入边计算。文本按 UTF-8 编码,每个字符都算数,包括空格和末尾的换行。
手机号、邮箱、接口签名串、一列用户 ID 都行。内容不会上传,也不会写进分享链接。
7945bd83237335e5376ff44d62e4f0ae适合校验、缓存键、老接口签名,不能用来存密码。
ffe1cf3289b18e5aedf4f62e2c1ce2242bbdb0c2Git 和老系统里还常见,已能人为制造碰撞,安全场景别用。
a6942f9771d67f34034d2f1926988ed3fad3bf1b4e7cedb9a31f31398dea43bc对接标识符、做数据校验时的常用选择。
格式是「哈希 + 两个空格 + 原文」,和 sha256sum 命令一致;空行跳过。
版本 v1.0更新于 更新记录
同一段输入,四种输出
三种算法读的是同一串字节,区别在结果长度,以及能不能扛住有人故意攻击。
MD5
32 个字符的「指纹」。用来发现文件或数据被意外改动、做缓存键都够用;但已经能人为造出两段 MD5 相同的内容,不能拿它保护任何东西。
SHA-1
40 个字符。比 MD5 强,但同样已被证明能造出碰撞。现在主要出现在 Git 提交号和老系统对接里。
SHA-256
64 个字符,属于 SHA-2 家族。两个系统要对同一批手机号、邮箱、用户 ID 做匹配,又不想交换明文时,一般用它。
每行的 SHA-256
勾选「每行单独计算」后,每个非空行各算一个 SHA-256,适合一次处理一整列手机号。上面三个框仍然是整段文本的哈希。
哈希是确定的:同样的字节永远得到同样的结果;改一个字母、多一个空格或换行,整个哈希都会变。所以两边要匹配时,必须先按同一规则规范化。
三种常见用法
大多数人需要哈希值,是为了下面这几件事。
-
1
核对一个值
粘贴字符串,和接口文档、数据库或同事给的哈希对比。对不上时先查空格和换行。
-
2
做接口签名
很多国内接口要求把参数按规则拼成一串再算 MD5 并转大写。拼好后粘进来,勾选「结果转大写」。
-
3
批量处理一列数据
每行一个手机号或邮箱,勾选「每行单独计算」,把结果复制到表格或上传文件里。
MD5、SHA-1、SHA-256 有什么区别
哈希函数把任意长度的输入变成固定长度的输出,不能倒推,也没有密钥:谁拿同样的输入都得到同样的结果。所以「MD5 加密」其实是个习惯叫法,哈希不是加密,加密是可以用密钥还原的。
- 哈希单向、没有密钥;加密双向,有密钥能还原
- 手机号只有 11 位,常见邮箱也能枚举,把候选值逐个算哈希就能对出原文,所以不加盐的哈希谈不上匿名
- 存密码要用加盐的慢哈希(bcrypt、scrypt、Argon2),不要直接用 MD5 或 SHA-256
- 本工具按 UTF-8 计算;系统用 GBK 编码时,中文的哈希会和这里不同
| 算法 | 输出长度 | 十六进制位数 | 碰撞 | 适合 |
|---|---|---|---|---|
| MD5 | 128 位 | 32 | 已有实用攻击 | 校验、缓存键、老接口签名 |
| SHA-1 | 160 位 | 40 | 已被证明可碰撞 | Git、老系统 |
| SHA-256 | 256 位 | 64 | 目前没有已知碰撞 | 标识符匹配、数据完整性、签名 |
同一个手机号,写法不同,哈希全变
把同一个号码按四种样子输入。不做规范化时,多一个空格或换行,哈希就完全不同,两边的数据永远对不上。
| 输入 | 规范化 | MD5 | SHA-256(64 位中的前 16 位) |
|---|---|---|---|
13800138000 | 关 | 7945bd83237335e5376ff44d62e4f0ae | a6942f9771d67f34… |
anna@example.com | 关 | 6b56db1f84a3997b902509d3fbf0a306 | f7d54c22dda5b178… |
Anna@Example.com | 关 | 3f54a4758be5eeeeb5ac0cb24e8a6022 | 1fdc88a445bfd76d… |
Anna@Example.com (前后有空格) | 开 | 6b56db1f84a3997b902509d3fbf0a306 | f7d54c22dda5b178… |
打开规范化后,最后一行和第二行完全一样。两边做匹配(比如给广告平台上传哈希过的手机号、邮箱)时,要用同一套规范化规则;手机号还要统一是否带 +86、有没有空格和横线,具体格式以平台文档为准。
哈希对不上,多半错在这里
算法本身不会出错,出错的是输入和对它的期待。
看不见的空格和换行
复制时多带了换行,或在命令行用 echo 没加 -n,哈希就全变了。要比较的是完全相同的字节。
编码不一致
中文在 UTF-8 和 GBK 下是不同的字节,算出的 MD5 也不同。老的 PHP、Java 项目尤其要留意。
用 MD5 存密码
MD5 算得极快,泄露后可以被高速批量猜解,常见密码一猜就中。密码要用 bcrypt、Argon2 这类加盐慢哈希。
以为哈希就是匿名
手机号做了 MD5,拿着原号码的人照样能算出来对上。按《个人信息保护法》这属于去标识化,仍是个人信息。
认出用户,又不用到处传手机号
TapCub 在服务端对标识符做哈希,你也可以用自己掌握的 ID 来识别用户,不必让手机号、邮箱跟着每个事件到处走。
MD5 是什么?MD5 是加密吗?
MD5 是一种哈希算法,把任意文本变成 32 个十六进制字符。它没有密钥、不能还原,严格说不是加密,「MD5 加密」只是习惯叫法。需要还原的数据用加密(如 AES),只需要比对的数据用哈希。
MD5 可以解密吗?
不能。哈希结果里没有保存原文。网上的「MD5 解密」是事先把大量常见字符串算好存成表,拿你的哈希去查;常见密码、手机号这类短值容易被查到,随机的长文本查不到。
MD5 32 位和 16 位有什么区别?大写小写一样吗?
32 位是完整结果;16 位是取 32 位结果的第 9 到 24 位,本工具只给 32 位,需要 16 位时自己截取。大小写只是显示不同,A3F1 和 a3f1 是同一个值,按对方要求选即可。
MD5 和 SHA-256 有什么区别,该用哪个?
SHA-256 输出更长(64 个字符),目前没有已知碰撞;MD5 已经能被人为造出碰撞。新的对接优先用 SHA-256;对方接口明确要求 MD5 时(很多老接口签名如此)才用 MD5。
为什么我算出来的和别的工具、代码里的不一样?
几乎都是输入不同:末尾多了换行或空格、大小写不同,或者中文用了 GBK 而不是 UTF-8。先确认两边是完全相同的字节,再比较结果。
密码可以用 MD5 或 SHA-256 存吗?
不建议。这两种算法都很快,数据库泄露后可以高速猜解。存密码用 bcrypt、scrypt 或 Argon2,并给每个用户单独加盐。
手机号做了哈希,还算个人信息吗?
一般仍算。拿着原号码就能重新算出同样的哈希并对上,属于《个人信息保护法》说的去标识化,不是匿名化,存取和保留期限仍要按个人信息管理。这里只是常识说明,不是法律意见。
能用这个工具算文件的 MD5 吗?
不能,这里只算文本。文件请用命令行:macOS 用 md5 文件名 或 shasum -a 256 文件名,Linux 用 md5sum / sha256sum,Windows 用 certutil -hashfile 文件名 MD5。