对称加密和非对称加密该用哪个?AES、RSA 与摩斯密码
选错加密方式不会报错,只会让数据悄悄变得不安全。AES 是对称加密、RSA 是非对称加密,两者性能差几个数量级,实际系统里它们配合使用,而不是二选一。
- AES 是对称加密,加解密用同一把密钥,速度比 RSA 快几个数量级,适合加密任意长度的数据
- RSA 是非对称加密,公钥加密只能用私钥解密;密钥长度决定单次可加密的数据量,2048 位密钥上限约 190 字节
- 实际系统用 RSA 加密 AES 密钥、用 AES 加密正文,这就是混合加密,HTTPS 的 TLS 握手是同一个思路
- 密钥和 IV 都不能重复使用:相同密钥加相同 IV 会让相同明文产生相同密文,直接暴露数据的规律
- DES 的有效密钥只有 56 位,新系统不应再用;它的正确用途是解析历史遗留数据
- 摩斯密码是公开的编码规则,任何人都能查表还原,它只提供可读性转换,不提供任何机密性
#对称加密和非对称加密的区别只有一句话
对称加密加解密用同一把密钥,非对称加密用一对密钥:公钥加密、私钥解密。 这个差别决定了它们的速度、可加密长度和适用场景。
| 对比项 | 对称加密(AES) | 非对称加密(RSA) |
|---|---|---|
| 密钥 | 一把,双方共享 | 一对,公钥公开、私钥保密 |
| 速度 | 快,适合大数据量 | 慢,通常慢数千倍 |
| 可加密长度 | 任意长度 | 受密钥长度限制 |
| 主要用途 | 加密数据本身 | 传递密钥、数字签名 |
| 代表算法 | AES-128/256、DES | RSA-2048/4096 |
用 AES / DES 加解密 处理一段长文本几乎瞬间完成,而同样的内容交给 RSA 会明显变慢且很快触到长度上限 —— 这就是两者必须分工的原因。
#AES 该选哪种模式
新数据一律用 AES-GCM,它在加密的同时校验完整性;只有需要兼容旧接口时才用 CBC。
AES / DES 加解密 支持下面这几种组合:
| 模式 | 自带完整性校验 | 什么时候用 |
|---|---|---|
| AES-128-CBC | 否 | 兼容旧接口,需要另做一次校验 |
| AES-256-CBC | 否 | 同上,密钥更长 |
| AES-GCM | 是 | 推荐,篡改会让解密直接失败 |
| DES-CBC | 否 | 只用于解析历史数据 |
CBC 有一个已知弱点:攻击者翻转密文里的某个字节,可以让解密出的明文对应位置发生可预测的变化。GCM 会对密文算出认证标签,数据被动过就校验不通过。
DES 的有效密钥长度只有 56 位,也就是约 7.2×10^16 种组合,专用硬件可以在数天内穷举完。「能解开」不等于「安全」,看到 DES 只应该出现在解析历史数据的场景里。
#密钥和 IV 为什么不能复用
因为相同的密钥加相同的 IV 加相同的明文,会产生完全相同的密文 —— 攻击者不需要解密就能看出两条记录内容一致。
IV 复用的后果在格式固定的数据上最明显:
- 每天加密一份结构相同的报表时,相同字段会输出相同的密文块
- 取值分布、重复记录条数这些信息会直接泄露
- 若明文的取值可枚举(例如只有几个状态值),攻击者可以直接构造对照表
所以正确做法是每次加密都换一个 IV,并把 IV 与密文一起保存。IV 不需要保密,只需要唯一,CBC 模式额外要求不可预测:
存储格式:[ IV(16 字节)][ 密文 ]
加密:生成随机 IV -> 用 IV + 密钥加密 -> 保存 IV 与密文
解密:读出前 16 字节作为 IV -> 用 IV + 密钥解密CBC 的 IV 必须是不可预测的随机值,GCM 的 IV 必须每次唯一。 GCM 下重复使用同一个 IV 会直接泄露认证密钥,后果比 CBC 更严重。这也是 AES / DES 加解密 在 IV 留空时自动生成随机值的原因 —— 手填一个固定的「1234567890123456」是常见的错误用法。
#RSA 只能加密比密钥短的数据
RSA 单次能加密的数据量由密钥长度决定:2048 位密钥上限约 190 字节,4096 位上限约 446 字节,超一个字节就会报错。
| 密钥长度 | 单次加密上限(OAEP + SHA-256) | 说明 |
|---|---|---|
| 2048 位 | 190 字节 | 目前可接受的最低强度 |
| 3072 位 | 318 字节 | 安全边际更高 |
| 4096 位 | 446 字节 | 生成与计算更慢 |
上限来自公式:密钥字节数 − 2 × 哈希长度 − 2。2048 位密钥是 256 字节,SHA-256 的哈希长度是 32 字节,256 − 64 − 2 = 190。
正因为如此,实际用法不是「用 RSA 加密数据」,而是「用 RSA 加密一把 AES 密钥,再用 AES 加密数据」。一把 AES-256 密钥只有 32 字节,RSA 处理它绰绰有余。
#公钥和私钥的方向不能搞反
记住两个方向就够了:公钥加密、私钥解密;私钥签名、公钥验签。
反过来的「私钥加密、公钥解密」在数学上可以做,但公钥是公开的,任何人都能解开,所以它不提供机密性,只在数字签名场景里使用。
| 你想做什么 | 用哪把密钥 |
|---|---|
| 让别人给你发加密数据 | 对方用你的公钥加密 |
| 解开收到的数据 | 你用私钥解密 |
| 证明一条消息确实来自你 | 你用私钥签名 |
| 验证签名的真实性 | 其他任何人用你的公钥验签 |
用 RSA 公私钥加密 可以生成 2048/3072/4096 位的密钥对,也能粘贴外部 PEM 格式的公钥或私钥导入,长文本会自动分段处理。
需要长期使用的密钥建议在本地生成:
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem在线工具只适合验证流程和调试。生产环境的私钥不应该经过任何网站,包括本站。
#摩斯密码不是加密
摩斯密码是一套完全公开的编码规则,任何人都能查表还原,它不提供任何机密性。
判断标准只有一条:需要密钥才能还原的是加密,不需要密钥的是编码。 对照一下就清楚了:
| 方式 | 需要密钥 | 性质 |
|---|---|---|
| AES / RSA | 是 | 加密 |
| 摩斯密码 | 否 | 编码 |
| Base64 | 否 | 编码 |
| 哈希 | 否(且不可逆) | 单向摘要 |
用 摩斯密码 转换文本与摩斯码,单词之间用 / 分隔:
SOS -> ... --- ...
HELLO -> .... . .-.. .-.. ---#什么时候该用哪个工具
| 你想做的事 | 用哪个 | 说明 |
|---|---|---|
| 加密一段文本或文件 | AES / DES 加解密 | AES-128/256-CBC、AES-GCM、DES-CBC |
| 生成密钥对、加密少量数据 | RSA 公私钥加密 | 2048/3072/4096 位,支持 PEM 导入导出 |
| 校验文件有没有被改动 | SHA 系列哈希 | 单向、不可逆 |
| 生成短摘要或做简单校验 | MD5 加密 | 已不适合用于安全场景 |
| 把二进制转成文本再传输 | Base64 编码解码 | 编码不是加密,任何人都能解开 |
| 转换摩斯码 | 摩斯密码 | 编码练习与趣味转换 |
#常见问题
#已经有 AES 了,为什么还需要 RSA?
因为 AES 需要双方共享同一把密钥,而「怎么把密钥安全地交给对方」本身就是难题。RSA 解决了这一步:公钥可以公开传输,私钥不离开本机,对方用公钥加密的 AES 密钥只有你能解开。两者是配合关系,不是替代关系。
#AES 和 RSA 哪个更安全?
在正确使用的前提下两者都足够安全,差别在适用场景。AES-256 的密钥空间是 2^256,目前没有可行的穷举方法;RSA-2048 的安全性建立在大整数分解难题上。真正导致泄露的几乎都是用法错误,比如 IV 重复使用、密钥硬编码在代码里、或者用了不带完整性校验的模式。
#密钥和 IV 有什么区别?
密钥必须保密,IV 不需要保密但必须每次唯一,CBC 还额外要求它不可预测。IV 的作用是让同一把密钥加密同样的明文时产生不同的密文。存储时通常把 IV 明文放在密文前面,解密时先取出 IV 再解数据。
#为什么 RSA 加密长文本会失败?
RSA-OAEP 单次能加密的长度是「密钥字节数 − 2 × 哈希长度 − 2」。2048 位密钥配 SHA-256 时只有 190 字节,多一个字节就报错。RSA 公私钥加密 会自动把长文本分段处理,但更正确的做法是用 RSA 加密一个 AES 密钥,正文交给 AES。
#摩斯密码能用来加密吗?
不能。摩斯码的对照表完全公开,在线查一下就能还原,它和 Base64、URL 编码属于同一类:只改变表示形式,不提供机密性。需要密钥才能还原的是加密,不需要密钥的是编码,这条判断标准对所有编码方式都适用。
本文提到的工具
AES/DES 对称加密解密在线工具,支持 AES-128/256 CBC、AES-GCM 与 DES…
立即使用 →RSA 公私钥加密RSA 在线加密解密工具,支持 2048/3072/4096 位密钥生成、公钥加密私钥解密(RSA-O…
立即使用 →摩斯密码摩斯密码在线转换工具,支持英文、数字与标点双向互转,实时转换显示摩斯码对照表
立即使用 →MD5 加密32 位 MD5 摘要,文本与文件均可计算
立即使用 →SHA 系列哈希SHA-1 / SHA-256 / SHA-512 摘要,文本与文件均可计算
立即使用 →Base64 编码解码文本 Base64 编码解码,中文按 UTF-8 处理;图片与文件请用「图片转 Base64」
立即使用 →