编码、加密与哈希怎么选

4 个决策要点 · 涉及 21 款工具 · 编码 / 加密 / 哈希 · 内容最后核对 2026-10-25

这三件事经常被混为一谈,但选错一类就意味着「你以为加密了,其实什么都没保护」。

一句话结论

先问「要不要还原」和「要不要保密」:能还原不保密=编码,能还原要保密=加密,不能还原=哈希。Base64 是编码,不是加密。

「帮我加密一下这段文字」——这句话背后可能是三种完全不同的需求,而它们对应的工具在安全级别上差着十万八千里。Base64 经常被当成加密用,但它连一丁点保密性都没有:任何人拿到结果都能一键还原,因为它压根不需要密钥。把它当加密,等于把保险箱的钥匙插在锁上还贴了张「钥匙在此」的纸条。

要选对工具,先分清三件事的本质。编码(Encoding):可逆、无密钥,目的是把数据变成另一种「安全的表示形式」,方便在网络里传输——它不提供任何保密性。加密(Encryption):可逆、有密钥,只有拿到密钥的人才能还原,这才是真正的保密。哈希(Hashing):不可逆、无密钥,把任意长度的数据压成固定长度的指纹,用来做校验或存密码。判断你该用哪一类,问自己一个问题:我需要还原回来吗?需要且不必保密 → 编码;需要且必须保密 → 加密;不需要还原 → 哈希。

选型对照表

看逐项详解 →
你要做的事推荐工具类别注意
把二进制嵌进文本(如把图片写进 HTML)Base64编码/解码编码体积会膨胀约 33%,不是压缩
在 URL 里安全传递中文或特殊字符URL编码编码编码的是「参数值」而不是整个 URL
解析一段 URL,看它到底带了什么参数URL 参数解析器编码注意区分查询串与路径部分
把 HTML 里的尖括号转成实体HTML实体编码编码防止把用户输入当成标签解析
把 HTML 实体还原成原始字符HTML实体编码/解码编码与上面成对使用,方向相反
处理混在一起的转义与实体HTML转义处理编码适合清洗抓取来的网页文本
在 Base64 和十六进制之间来回转Base64互转/Hex编码Hex 体积是 Base64 的两倍
把文件与 Base64 互转Base64文件互转编码大文件会导致文本体积过大
把图片与 Base64 互转图片Base64互转编码适合做内联小图标,大图不划算
处理 \u4e2d 这类转义序列Unicode编码/解码编码注意区分「转义序列」与「UTF-8 字节」
修中文被错误解码产生的乱码UTF-8 与中文互转编码只能修「UTF-8 被当 GBK 读」这类错配
自动识别并修复乱码乱码修复工具编码先判断原始编码是否可推断
压缩数据以减少体积Gzip编码/解码编码这是压缩不是加密,可逆
把文本编成摩尔斯电码Morse电码编码仅用于趣味与通信练习
在不知道密钥的情况下查看 JWT 内容JWT 解析与验证编码JWT 的 payload 只是 Base64URL,不是密文
对称加密(同一把钥匙加解密),如保护文件AES加密/解密加密密钥强度决定安全,别用弱口令当密钥
非对称加密(公钥加密、私钥解密)RSA加密解密加密RSA 很慢且有长度限制,适合加密密钥而非大文件
解析 SSL/TLS 证书的域名与有效期SSL证书信息解析器运维证书内容本就是公开的,无需密钥
计算文本的哈希指纹Hash生成器哈希不可逆,不能用于还原原文
校验文件有没有被改动文件哈希校验哈希MD5 已不适合对抗人为篡改
生成 Apache 的 .htpasswd 密码行.htpasswd生成器哈希必须用 bcrypt / APR1,别用明文

表格中列出的工具均可直接点击进入,全部免费、无需注册。

逐项详解

全部工具总览 →

1编码:可逆、无密钥,只负责「表示形式」

编码的唯一目的是让数据能在原本吃不消的通道里安全通过。URL 里不能直接放空格和中文,所以要先 URL 编码成 %E4%B8%AD 这样的形式;HTML 正文里不能直接写尖括号,所以要先转成实体;纯文本协议(如邮件、JSON 字符串)里不方便放二进制,所以要先 Base64。这类操作全部公开可逆、不涉及任何密钥——谁都能还原,这正是它们的设计目标。把 Base64 结果当成加密的人,往往是在「看起来是一串乱码」这一点上被误导了:乱码感不等于保密。

2加密:分对称与非对称两条路

对称加密(AES 是典型)加解密用同一把密钥,速度快、适合处理大量数据,问题是「怎么安全地把密钥交给对方」。非对称加密(RSA 是典型)用一对密钥:公钥可以随便公开,用它加密的内容只有私钥能解开,反过来用私钥签名的内容公钥可以验证来源。它解决了密钥分发难题,但运算慢、且有单次加密长度上限。所以工程上的标准做法是两者配合:用非对称加密传递一把临时对称密钥,之后的数据都用对称加密传——这就是 HTTPS 握手的核心思路。

3被误读最多的一个:JWT

JSON Web Token 由三段用点号连接:头部、载荷、签名。很多人以为载荷经过「加密」所以别人看不到——恰恰相反,载荷只是 Base64URL 编码,任何人粘贴出来就能读到里面的用户 ID、角色、过期时间。JWT 真正保证的是「防篡改」:服务端用密钥验证签名,一旦载荷被改动,签名就对不上。所以 JWT 里绝不能放密码、身份证号之类的敏感信息,它解决的是「我怎么知道这个声明没被改过」,不是「我怎么让别人看不到这个声明」。

4哈希:同一条路走不通两次

哈希把任意长度的输入压成固定长度的指纹,且有两个关键性质:不可逆(无法从指纹推回原文)和抗碰撞(很难找到两个不同输入产生同一指纹)。这正是它在密码存储与完整性校验上不可替代的原因——数据库里只存密码的哈希,即使被拖库,攻击者也拿不到明文。但要注意两点:一是 MD5 和 SHA-1 已经被证明能构造碰撞,用于对抗人为篡改已不安全,涉密场景请用 SHA-256 及以上;二是存储密码不能直接哈希,因为相同密码会产生相同哈希,会被彩虹表批量破解,必须加盐并采用慢哈希算法(bcrypt、scrypt、argon2),这也是为什么 Apache 的 .htpasswd 默认用 bcrypt 而不是 MD5。

关于「编码、加密与哈希怎么选」的常见问题

Base64 到底算不算加密?

不算。Base64 是纯粹的编码,不需要任何密钥,任何人拿到结果都能一键还原。它的用途是让二进制数据能安全地在只支持文本的通道里传输,顺便让内容变得「不容易一眼看懂」,但这与保密无关。需要保密请用 AES 等加密算法,并且妥善保管密钥。

AES 和 RSA 该选哪个?

看数据量和密钥分发条件。AES 是对称加密,加解密用同一把钥匙,速度快,适合加密大量数据;RSA 是非对称加密,用公钥加密、私钥解密,解决了「怎么安全地把钥匙给对方」的难题,但速度慢且有单次加密长度限制。工程上的标准做法是两者结合:用 RSA 传递一次性的 AES 密钥,之后的数据全部用 AES 加密。

JWT 里的内容别人能看到吗?

能。JWT 的载荷部分只是 Base64URL 编码,没有加密,任何人把它粘贴进解码工具都能读到内容。JWT 保证的是防篡改——服务端用密钥验证签名,改动过的载荷签名对不上。所以载荷里不能放密码、身份证号等敏感信息,它解决的是「声明有没有被改过」,而不是「别人能不能看到」。

MD5 还能用来校验文件吗?

要看对抗的是什么。用于检测传输过程中因网络、磁盘导致的随机损坏,MD5、CRC32 都够用,它们对随机错误很敏感。但如果要对抗人为篡改,MD5 和 SHA-1 已经不安全——研究者早已能构造出内容不同但哈希相同的一对文件。凡是涉及安全性的场景,请改用 SHA-256 或更强的算法。

为什么数据库里存密码不能直接用哈希?

因为不加盐的直接哈希有两个致命问题:相同密码会产生相同的哈希值,攻击者一眼就能看出哪些用户用了同一个密码;而且可以用预计算好的彩虹表批量反查。正确做法是对每个密码生成独立的随机盐,并采用故意设计得较慢的哈希算法(bcrypt、scrypt、argon2),大幅提高暴力枚举的成本。

本篇涉及的全部 21 款工具

编程开发
Base64编码/解码

Base64编码 - Base64 加密与解密,支持文本和文件的编解码

编程开发
URL编码

URL编码 - URL 加密与解密,编码特殊字符,处理中文路径

站长工具
HTML实体编码

HTML实体编码 - HTML特殊字符与实体编码互转,支持命名实体和数字编码

文本工具
Unicode编码/解码

中文、表情符号等字符与Unicode转义序列(\u或U+格式)双向转换。

编程开发
Gzip编码/解码

在线Gzip压缩与解压工具,支持文本压缩和Base64数据解压,显示压缩率统计,纯浏览器本地处理

编程开发
AES加密/解密

在线AES加密/解密工具,基于浏览器原生 Web Crypto API,支持 AES-GCM / AES-CBC 模式与 128/192/256 位密钥,PBKDF2 密码派生,纯前端本地运行,密钥与数据均不上传服务器。

编程开发
RSA加密解密

RSA与ECC公私钥生成、加密解密、数字签名验签工具,支持RSA-2048/4096、ECC(P-256/secp256k1),笔记本内Web Crypto API,公私钥不离开设备。

站长工具
SSL证书信息解析器

在线解析 PEM 格式的 SSL 证书,直接读出序列号、版本、签名算法、生效与失效时间、颁发者与主体通用名,并自动计算剩余有效天数与到期风险,全程在浏览器本地解码不上传。

编程开发
JWT 解析与验证

在线JWT解析工具,可解码Header和Payload、查看标准声明、检测Token是否过期、支持HMAC签名验证

编程开发
Hash生成器

支持MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512等多种哈希算法,纯浏览器端计算

编程开发
文件哈希校验

文件哈希计算器 - 计算文件的MD5、SHA1、SHA256哈希值

站长工具
.htpasswd生成器

在线生成 Apache 与 Nginx Basic 认证所需的 .htpasswd 文件内容,支持 Apache MD5 与 SHA1 两种哈希格式,可批量输入用户名密码并选择每个用户独立加盐,全部在浏览器本地计算。

站长工具
URL 参数解析器

输入任意URL,自动拆分协议、域名、端口、路径、参数、锚点,支持批量解析、参数删除、URL编码解码和CSV导出

文本工具
HTML实体编码/解码

HTML实体编码解码工具,将特殊字符转为&name;或&#nnn;格式,支持命名实体、数值实体编码与解码,纯浏览器本地运行。

编程开发
HTML转义处理

HTML特殊字符与HTML实体互转,支持转义/反转义,附常见实体对照表,纯本地处理

编程开发
Base64互转/Hex

Hex与Base64编码互转工具,支持文本和十六进制数据转换,纯浏览器本地处理

文本工具
Base64文件互转

Base64与文件互转工具,支持任意格式文件与Base64编码的相互转换,纯浏览器本地处理

图像工具
图片Base64互转

图片与Base64编码互转工具,支持图片转Base64和Base64转图片,纯浏览器本地处理,不上传服务器

编程开发
UTF-8 与中文互转

在线完成中文与 UTF-8 十六进制、Unicode 转义、URL 百分号编码之间的互转,解决乱码与转义问题,纯浏览器本地处理

文本工具
乱码修复工具

在线尝试修复文本乱码,针对编码错配、URL 编码残留、HTML 实体未解析与 Unicode 转义等常见情况自动生成多个还原候选,并按中文占比评估可信度。

文本工具
Morse电码

将文字转换为Morse电码(·-),或解码Morse电码为文字,支持字母、数字和常用标点。

内容标识:本页内容由人工智能辅助生成,并经人工核对与编辑。详见 人工智能生成内容标识说明。