文本 MD5
文本 MD5 是把一段文字按指定编码取成字节、再用 MD5 算法压成 128 位摘要的在线工具,写成 32 个十六进制字符。粘贴即出 32 位与 16 位、大小写四个值,批量模式一行一条、上万行一次算完导出 CSV。中文按 UTF-8 还是 GBK 取字节会得出两个都对的值,两种都能切;支持加盐与 PHP 口径的双重 MD5、期望值比对。MD5 不可逆、不做反查,文本与盐在浏览器本地计算、不上传。
当前口径:md5(文本),按 UTF-8 取字节。
🔒 文本与盐都在你的浏览器本机计算,不上传、不保存;本页只把编码、大小写这类参数偏好记在本机, 原文、盐、期望值与结果一律不落盘,也不会写进网址。单次上限 2MB / 10000 行。
⚠️ MD5 已被证明可以构造碰撞,不要再用于密码存储与数字签名;用作文件指纹、缓存 key、 对接旧接口没问题。本页只做单向摘要,不提供也不会提供任何「MD5 解密 / 反查」功能。
如何使用文本 MD5
文本 MD5 怎么算:先在上方文本框粘贴要计算的文字(文本与盐都在浏览器本地处理、不上传),也可以点「填入示例」先看效果;要算一批就把模式切成「批量」,一行一条。
默认就是「单条 + UTF-8 + 无盐 + 32 位小写」,不用碰任何开关;和后端对不上时再按需切换编码(中文的 MD5 取决于取字节的编码)、填盐并选前缀还是后缀、打开双重 MD5,参数区上方会实时显示当前算的是哪个公式。
把对方给的 MD5 粘进「期望值比对」框即可核对,大小写与首尾空白都不影响;不一致时页面会列出可能原因。结果可逐个复制,批量结果可复制 TSV、复制 MD5 列或下载 CSV(带 BOM,Excel 打开不乱码)。
关于文本 MD5的常见问题
- 文本 MD5 在线计算会上传我的内容吗?
- 不会。文本 MD5 全程在你的浏览器本地完成,粘贴的文字、盐和算出的哈希都不会上传到任何服务器。这一点对本工具格外重要,因为往这里粘的常常就是密码、密钥、身份证号或订单号:本页只把编码、模式、加盐位置这几项参数偏好写进本机 localStorage,原文、盐、期望值与结果一律不落盘,也绝不会把参数同步到网址里(那等于把密码写进浏览器历史)。想自证就打开 F12 的网络面板再算一次:计算过程零请求,断网照样出结果(页面本身会加载一个访问统计脚本,它不读取也不上报你粘贴的内容)。
- MD5 加密后能解密还原成原文吗?
- 不能,本页也不提供任何反查入口。严格说 MD5 不是加密而是单向摘要:不管原文多长,输出固定 128 位,信息在压缩过程中已经丢掉,数学上不可能还原。网上所谓「MD5 在线解密」都是查彩虹表,也就是拿库里预先存过的常见明文比对——123456 这种能查到,换成一句没人存过的话就查不到,所以它既不通用也不是真的解密。要验证一个密码对不对,正确做法是把待验证的文本算一遍 MD5 再和已有的值比对,本页的「期望值比对」做的就是这件事。
- 为什么我算的中文 MD5 和别人不一样?
- MD5 吃的是字节不是字符,中文取字节的编码不同,算出来的 MD5 就不同。同样一句「你好」,UTF-8 下是 6 个字节,MD5 是 7eca689f0d3389d9dea66ae112e5cfd7;GBK 下是 4 个字节,MD5 是 b94ae3c6d892b29cf48d9bea819b27b9——两个都对,只是取字节的口径不同。这正是「我算的和后端对不上」的头号原因,而多数在线工具只给 UTF-8 一种口径也不解释。把本页的编码开关切成和对方一致即可对上;如果切了还是不同,再依次检查末尾换行和首尾空格。
- MD5 的 16 位和 32 位有什么区别?
- 16 位 MD5 是 32 位结果的第 9 到第 24 个字符,是业界惯例的截取,不是另一种算法。以 hello 为例,32 位是 5d41402abc4b2a76b9719d911017c592,16 位就是取中间那段 bc4b2a76b9719d91,本页两个值一次给全,还各有大小写版本。位数砍半意味着碰撞概率大幅上升,安全性更低,所以 16 位只建议在对接明确要求 16 位的旧接口时使用。顺带一提,大小写只是十六进制的书写形式,不影响它代表的那 128 位,比对时大小写不敏感即可。
- 文本 MD5 一次最多能批量算多少行?
- 批量模式一行一条,单次上限 10000 行、2MB(按所选编码下的字节数计算),一万行邮箱地址实测十几毫秒算完。结果表只渲染前 500 行,避免上万行一次性塞进页面把手机卡死,但「复制全部」「复制 MD5 列」和「下载 CSV」拿到的都是全部数据,不受这个预览上限影响。输入超过 200KB 或 2000 行时会自动关掉「边输入边算」,改成参数调好后点按钮触发;超过上限会明确提示,请拆成几批再算。
- 双重 MD5 md5(md5(x)) 怎么算才对?
- 本工具按 PHP 口径:对第一次算出的 32 位小写十六进制字符串(也就是 32 个 ASCII 字节)再算一次,md5(md5(123456)) 得到 14e1b600b1fd579f47433b88e8d85291。另一种口径是对第一次的 16 字节原始摘要再算,结果与前者完全不同。PHP 的 md5() 默认返回十六进制字符串,所以 Discuz、旧版 WordPress 与大量国内 CMS 的登录逻辑天然是前一种,这也是「我双重算完和数据库对不上」的常见原因。本页只提供 PHP 这一种口径,不做任意迭代次数。
- 加盐的 MD5 加密怎么算,盐加在前还是后?
- 加盐就是把盐和原文拼成一个字符串再算 MD5,位置必须和对方系统完全一致:前缀是 md5(盐+文本),后缀是 md5(文本+盐),两者结果毫无关系。以 123456 加盐 deer 为例,后缀得 cd2d958f33de9030a839e367bd76c6d6,前缀得 a96c73125bd8652c74cae9067b689c68。本页参数区上方会实时显示当前口径的公式,加盐与双重同时打开时按所选位置先拼好再连算两遍,默认的后缀就是 md5(md5(文本+盐))。盐同样只在本地参与计算,不上传也不保存;盐里有中文时会按你选的编码一起取字节。
- 算出的 MD5 和 md5sum、PHP md5() 一致吗?
- 一致。MD5 只有一种算法(RFC 1321),差异只可能来自喂进去的字节,本页用 hash-wasm 计算,与系统 md5sum 逐位相同。需要特别注意命令行的一个坑:echo hello | md5sum 会在文本末尾多算一个换行,得到 b1946ac92492d2347c6235b4d2611184,而 printf hello | md5sum 才是 5d41402abc4b2a76b9719d911017c592,后者与本页默认口径相同。另外浏览器自带的 Web Crypto 并不支持 MD5,crypto.subtle.digest 只定义了 SHA 系列,所以在线工具必须自带一份实现或用 WASM。
- MD5 加密还能用来存密码吗?
- 不建议。MD5 已经能被实用地构造出碰撞,而且算得太快——显卡每秒可以试上百亿次,常见口令几乎瞬间被撞出来,加盐只能拖慢批量破解而不能解决根本问题。存密码请改用 bcrypt、scrypt、Argon2 这类刻意放慢的算法。但也不必一刀切地说 MD5 完全不能用:拿它做文件指纹、缓存 key、数据去重比对,或者对接一个只认 MD5 的老接口,都仍然是合适的用法,本工具正是为后面这些场景准备的。
- 手机上能用文本 MD5 在线计算吗?
- 可以。本页是纯网页实现,手机、平板、电脑浏览器打开即用,免安装免注册,算出来的结果和电脑上完全一致。小屏下参数区、输入框与结果区上下堆叠而不是并排,32 位结果会自动折行显示不会被截断,每个结果都有独立的复制按钮方便直接粘到别处;批量模式的结果表可以横向滚动,页面本身不会横向溢出。
中文 MD5 为什么会算出两个值:UTF-8 与 GBK
这是整页最要紧的一条:MD5 吃的是字节,不是字符。RFC 1321 只定义了 一种 MD5,真正的分歧点从来不在算法本身,而在「这段文字怎么变成字节」。英文和数字 不会出问题,因为 ASCII 区各种编码都一样;中文就不同了,同一个字在 UTF-8 和 GBK 下 是完全不同的两串字节,喂给同一个 MD5 自然得到两个不同的值——而且两个都对。
| 编码 | 逐字节(十六进制) | 字节数 | 32 位 MD5 |
|---|---|---|---|
| UTF-8 | e4 bd a0 e5 a5 bd | 6 | 7eca689f0d3389d9dea66ae112e5cfd7 |
| GBK | c4 e3 ba c3 | 4 | b94ae3c6d892b29cf48d9bea819b27b9 |
所以「MD5 中文乱码」「中文 MD5 对不上」这类问题,答案几乎总是:你和对方取字节的 编码不一样。本页把这一步显式化成一个开关,字节数就写在结果旁边,切一下就能对齐。 判断对方用的是哪种也有个土办法:让他算一遍「你好」,出 7eca 开头就是 UTF-8,出 b94a 开头就是 GBK。
本站的 GBK 是从浏览器内置的 gb18030 解码器反推出来的一张反查表,共收录 23939 个字符,覆盖 GB2312 全部汉字、GBK 扩展汉字、日文假名与全角 符号,① 编成 a2 d9、~ 编成 a1 ab。不覆盖的是 emoji、韩文谚文和 GB18030 四字节区的生僻字(如 𠮷):遇到这些字符本工具会明确报出来是哪几个,绝不静默替换成问号——静默替换会给出一个「看着对其实错」的哈希, 比直接报错危险得多。另有一处细节值得记:€ 在本工具按 GB18030 双字节口径编成 a2 e3, 而部分 GBK 实现把它当单字节 0x80,两边结果会不同。
MD5 和别人算的不一样?按这五条挨个查
把对方给的值粘进「期望值比对」框,不一致时本页会自动按下面五条判据各算一遍做对比, 命中哪条就直接告诉你哪条。全部不命中就如实说「常见原因都不匹配」,不硬凑结论。
| # | 判据 | 实测对照 |
|---|---|---|
| 1 | 文本末尾多了一个换行 | hello 是 5d41402abc4b2a76b9719d911017c592,hello 加一个换行是 b1946ac92492d2347c6235b4d2611184 |
| 2 | 首尾多了空格 | hello 末尾多一个空格就变成 f814893777bcc2295fff05f00e508da6 |
| 3 | 中文取字节的编码不同 | 「你好」UTF-8 得 7eca689f…,GBK 得 b94ae3c6… |
| 4 | 对方给的是 16 位口径 | hello 的 16 位是 bc4b2a76b9719d91,正好是 32 位的第 9–24 个字符 |
| 5 | 双重或加盐的口径不同 | md5(md5(123456)) 得 14e1b600b1fd579f47433b88e8d85291;123456 加盐 deer 后缀得 cd2d958f…、前缀得 a96c7312… |
MD5 的 32 位、16 位与大小写怎么选
MD5 的输出恒定是 128 位,也就是 16 个字节。写成十六进制就是 32 个字符,这是最标准 的形式。所谓「16 位 MD5」并不是另一种算法,而是把这 32 个字符掐头去尾、取中间的 第 9 到第 24 个字符,是一个流传很广的业界惯例。大小写更简单,只是十六进制的书写 形式,代表的仍是同一个值。
| 结果格 | 值 | 它是怎么来的 |
|---|---|---|
| 32 位小写 | 5d41402abc4b2a76b9719d911017c592 | 标准形式,最常用,本页放在最上面 |
| 32 位大写 | 5D41402ABC4B2A76B9719D911017C592 | 同一个值换成大写字母书写 |
| 16 位小写 | bc4b2a76b9719d91 | 取 32 位的第 9–24 个字符,不是另一种算法 |
| 16 位大写 | BC4B2A76B9719D91 | 同上,换成大写书写 |
选哪个取决于对接方要什么:没有特殊要求就用 32 位小写;数据库里存的是 16 位就用 16 位,但要清楚它把摘要长度砍掉了一半,碰撞概率随之大幅上升,安全性更低, 只适合对接旧接口而不适合新设计。比对的时候大小写与首尾空白都不必较真,本页的 期望值比对已经做了归一化处理。
加盐与双重 MD5 怎么算才和后端一致
老系统的密码字段很少是裸 MD5,通常带盐、或者算了两遍,甚至两者都有。这里的每一处 细节都会改变最终结果,所以本页把口径显式摆出来,参数区上方那行公式会跟着开关实时变。
| 口径 | 公式 | 123456 的结果 |
|---|---|---|
| 裸 MD5 | md5(文本) | e10adc3949ba59abbe56e057f20f883e |
| 盐加在后(本页默认) | md5(文本 + 盐) | 加盐 deer 得 cd2d958f33de9030a839e367bd76c6d6 |
| 盐加在前 | md5(盐 + 文本) | 加盐 deer 得 a96c73125bd8652c74cae9067b689c68 |
| 双重 MD5 | md5(md5(文本)) | 14e1b600b1fd579f47433b88e8d85291 |
双重 MD5 还藏着一个更隐蔽的分歧:第二遍到底喂什么进去。一种是把 第一遍得到的 32 位小写十六进制字符串(32 个 ASCII 字节)再算一次,另一种是把第一遍 的 16 字节原始摘要再算一次,两者结果完全不同。PHP 的 md5() 默认返回的就是十六进制 字符串,所以 md5(md5($p)) 天然属于前者,Discuz 与大量国内 CMS 的登录逻辑也都是这一支。本工具固定采用前者,即 md5(md5(123456)) = 14e1b600b1fd579f47433b88e8d85291; 后者只在少数二进制接口里出现,本页不提供,但知道有这么个差别,你就能解释「双重算完 还是对不上」是怎么回事了。加盐与双重同时打开时,先按所选位置把盐拼好、再连算两遍: 默认的后缀是 md5(md5(文本+盐)),切到前缀才是 md5(md5(盐+文本))。
文本 MD5 实测算例:四行样例一次看全四种情况
页面里「填入示例」用的就是下面这四行,批量模式下按 UTF-8、不加盐算出来是这样 (前两行是公开的常见口令,你可以拿网上任何一处的值来核对本工具没算错):
| 行 | 原文 | UTF-8 字节数 | MD5(32 位小写) |
|---|---|---|---|
| 1 | 123456 | 6 | e10adc3949ba59abbe56e057f20f883e |
| 2 | admin | 5 | 21232f297a57a5a743894a0e4a801fc3 |
| 3 | 你好 | 6 | 7eca689f0d3389d9dea66ae112e5cfd7 |
| 4 | 小鹿tools | 11 | 9d2385fd9cd3771837a80dc681a97c25 |
这四行同时演示了四件事:纯数字口令能和任何一处公开值对上;纯英文同理;中文按 UTF-8 是每字 3 个字节;中英混排按字节而不是按字符计——「小鹿tools」是 7 个字符却有 11 个字节。把编码切成 GBK,最后一行会变成 9 个字节、结果变成 201c0af72b0ef75e51a51f29228aa403,第三行会变成 4 个字节、结果变成 b94ae3c6d892b29cf48d9bea819b27b9,同样都是正确的值。
批量结果可以「复制全部(TSV)」直接粘进 Excel,也可以「复制 MD5 列」只拿哈希,或者 下载 CSV。CSV 带 UTF-8 BOM,Excel 打开中文不乱码;原文里的逗号、引号和换行按 RFC4180 用引号包住转义,不会把列冲乱。空行默认跳过且不占结果行,但行号仍按原文行号 编,方便你回到原始数据里定位。
MD5 现在还能用吗:能用的场景与不能用的场景
关于 MD5 的说法容易走两个极端,一种是「MD5 加密很安全」,一种是「MD5 已经彻底不能 用了」,两句都不准确。准确的说法是:MD5 早已被实用地构造出碰撞(能造出两份不同内容 却同一个 MD5 的文件),而且算得太快,用显卡每秒可以试上百亿次口令,所以凡是依赖 「难以伪造」或「难以反推」的用途都不该再用它;但在不依赖这两点的场景里,它依然是 一个又快又通用的指纹。
文本 MD5 工具的边界:这页做什么、不做什么
| 事项 | 本页的处理 |
|---|---|
| 单次输入上限 | 2MB(按所选编码下的字节数判定,不按字符数),超过会明确提示请拆分 |
| 批量行数上限 | 10000 行;超出部分不计算,并告诉你还剩多少行 |
| 结果表渲染上限 | 只渲染前 500 行,复制与下载仍是全部数据 |
| 自动计算阈值 | 超过 200KB 或 2000 行会关掉边输入边算,改成点按钮触发 |
| MD5 解密 / 反查 / 破解 | 不做,也不会做:MD5 单向不可逆,所谓解密都是查彩虹表 |
| 文件的 MD5 | 不做,请用「文件 MD5/SHA 校验」;本页只吃文本框里的文字 |
| SHA、HMAC、CRC32、bcrypt | 本页只算 MD5,不混进其他算法,一个需求一个页面 |
| 任意迭代次数 | 只提供「双重 MD5」一个开关,不做迭代 N 次这种造出来的需求 |
| 密码强度评估 | 不做,本页只在结果区给一句风险提示 |
| 网络请求与落盘 | 零请求;只把编码、模式等参数偏好记在本机,原文与结果不落盘 |
最后提一句英文语境下的叫法,方便你去查资料:这类工具通常叫 MD5 hash generator 或 text to MD5,搜 md5 online、md5 checksum of string 找到的都是同一件事。要算文件而 不是文字的话,请到「文件 MD5/SHA 校验」那一页,它支持分片流式处理大文件,还能一次 给出 SHA-1 与 SHA-256;如果你手上已经有官方给的校验值清单,「文件校验和验证」更省事。