常见加密算法解析
面试官问:"你简历上写着'熟悉加密算法',那AES和RSA有什么区别?DES为什么被废弃了?"
候选人小张支支吾吾:"AES是对称的,RSA是...非对称的?DES好像已经不用了..."
面试官追问:"SHA-256是加密算法吗?MD5呢?"
小张彻底卡住了...
这个问题卡住的候选人不在少数。加密算法的世界看起来名词很多,但只要掌握了分类逻辑,就会发现其实很清晰。
今天,我们就来把这块知识彻底讲清楚。
【直观类比】
加密算法的分类
想象你在经营一家快递公司,需要保护包裹里的物品不被偷窥。
对称加密就像:你和收件人共用一把钥匙,你锁上包裹,收件人用同一把钥匙打开。高效,但怎么把钥匙安全交给收件人是个问题。
非对称加密就像:收件人给你一把公开的锁(公钥),你把包裹锁好寄过去,只有收件人有钥匙(私钥)能打开。安全,但操作起来慢。
哈希算法则完全不是加密——它更像是一台碎纸机。无论你塞进去多少纸,出来的都是固定长度的碎纸条,而且这些碎纸条永远无法还原成原文。
记住这个比喻:加密是可逆的(能解密),哈希是不可逆的(不能解密,只能验证)。
对称加密算法
DES:曾经的王者,如今的退役老人
DES(Data Encryption Standard)诞生于1977年,曾经是美国的官方加密标准。
它的命运告诉我们:没有永远安全的算法,只有不断提升的计算能力。
DES的致命弱点是密钥太短。56位密钥意味着只有2^56(约7.2×10^16)种可能,在现代计算能力面前,暴力破解只是几十分钟的事。
3DES:DES的强行续命
为了解决DES的密钥太短问题,3DES(Triple DES)被设计出来:
相当于用三把钥匙给数据上了三重锁。
但3DES有个致命缺陷:性能太差。三次DES计算比一次AES慢了三倍,但安全性并没有提升三倍。
3DES已经在2023年被NIST正式废弃,正式退出历史舞台。
AES:对称加密的现任王者
AES(Advanced Encryption Standard)从2001年开始成为新的加密标准,至今仍是主流。
为什么AES能取代DES?因为它更强、更快、更安全:
AES的三种密钥长度:
AES-256不一定比AES-128更安全。实际上在某些实现上,AES-128反而因为密钥扩展算法更简单而更少出错。选什么级别取决于合规要求和具体实现。
非对称加密算法
RSA:教科书级的经典
RSA(Rivest-Shamir-Adleman)是最经典的非对称加密算法,1977年诞生至今依然是主流。
RSA的安全性基于大数因式分解难题:
已知n,很难反推出p和q。当这两个数足够大时,因式分解需要几十年甚至几百年。
RSA的实际应用场景:
RSA的密钥长度选择:
ECC:非对称的新选择
ECC(Elliptic Curve Cryptography)椭圆曲线密码学是近年来快速崛起的非对称加密方案。
它的核心优势是更短的密钥,更强的安全性:
这意味着:在移动端和物联网场景,ECC可以用更少的计算资源达到同等安全强度。
比特币用的就是secp256k1曲线,以太坊用的也是基于ECC的数字签名算法ECDSA。
ECC是P-256曲线(secp256r1)和Curve25519的区别:前者是NSA推荐的,后者是完全公开透明设计的Curve25519,不存在后门嫌疑。
哈希算法
哈希不是加密
首先必须纠正一个常见错误:哈希(Hash)不是加密算法。
加密算法强调可逆性——能加密就能解密。 哈希算法强调不可逆性——不能从哈希值还原原始数据。
MD5:曾经的明星,如今的警告牌
MD5(Message-Digest Algorithm 5)诞生于1991年,曾经是最流行的哈希算法。
但2004年,中国密码学家王小云证明了MD5可以快速碰撞:可以在几秒钟内找到两个不同的文件,它们有相同的MD5哈希值。
MD5的实际应用场景现在只剩下:校验文件完整性(不是为了安全,只是检查文件是否损坏或被篡改)。
绝对不要再用MD5做密码哈希!它的碰撞特性使得彩虹表攻击变得容易。2011年,LinkedIn的密码泄露事件中,650万个密码用MD5存储,黑客在几天内就破解了大部分。
SHA家族:安全哈希标准
SHA(Secure Hash Algorithm)家族是美国国家安全局(NSA)设计的标准:
SHA-256是当前最流行的哈希算法。比特币用SHA-256做工作量证明,以太坊也用SHA-256系列。
bcrypt:密码存储的专业户
bcrypt专门为密码存储设计,它的核心特性是慢:
bcrypt的cost因子可以调整:cost越高,破解难度越大,但验证用户也越慢。
加密模式:块密码的运行方式
对称加密算法如AES都是块密码,这意味着它们按固定大小的块处理数据。
这就引出了一个问题:如果数据不是块大小的整数倍怎么办?
ECB:最简单,也最不安全
ECB(Electronic Codebook mode)把数据分成块,每块单独加密:
问题:相同的块产生相同的密文。攻击者可以发现数据模式,这在任何需要保密的场景下都是灾难。
CBC:最常用的模式
CBC(Cipher Block Chaining)引入了前一块的密文参与当前块的加密:
这样相同的数据在不同位置会产生不同的密文,安全性大大提升。
GCM:兼顾加密和认证
GCM(Galois/Counter Mode)是目前最推荐的对称加密模式:
TLS 1.3强制要求使用AEAD(Authenticated Encryption with Associated Data)模式,GCM是最常用的AEAD模式之一。
常见误区
误区1:MD5和SHA是加密算法
不是。它们是哈希算法,无法解密,只能验证完整性或做密码比对。
误区2:AES-256一定比AES-128安全
不一定。相同实现下,AES-256的密钥空间更大。但在某些实现上,AES-256的密钥扩展算法有额外计算步骤,实际上可能暴露更多弱点。
选AES-128还是AES-256,取决于合规要求和具体实现质量。
误区3:RSA可以用来加密任意长度数据
不行。RSA的明文长度受密钥长度限制:
实际使用中,RSA只用于加密少量数据(如对称密钥),大文件加密用AES。
误区4:只要加密了,数据就安全
不是。加密只是安全的一部分:
- 密钥怎么存储?
- 加密的数据怎么传输?
- 谁能访问密钥?
- 数据泄露后有没有补救措施?
完整的 security 需要考虑很多方面。
记忆技巧
口诀
对称加密三剑客:DES已死,3DES续命,AES当王 非对称加密两流派:RSA经典数学,ECC曲线新贵 哈希不是加密,MD5、SHA、bcrypt各有所用 加密模式CBC最常见,GCM最安全
算法选择速查表
实战检验
检验1:选择加密方案
场景:你需要为用户的密码设计加密存储方案。
方案对比:
正确答案:用bcrypt或Argon2,加salt,带cost因子。
检验2:HTTPS用什么算法
场景:浏览器显示"HTTPS/TLS 1.3",用的是AES-256-GCM + ECDHE。
分析:
- AES-256-GCM:对称加密,数据传输用
- ECDHE:密钥交换,支持前向安全
- TLS 1.3:禁用已知不安全的密码套件
检验3:JWT用什么签名
场景:JWT通常用HS256或RS256。
对比:
【面试官心理】
面试官问加密算法,其实是在测试你对"工具箱"的理解程度。知道有哪些工具是60分,知道每个工具的特点是80分,能根据场景选择正确的工具是90分,如果还能说出"为什么",那就是P7的水平了。
延伸阅读
- 对称加密 vs 非对称加密 - 理解两类加密的核心差异
- TLS握手流程 - 了解加密算法如何应用在实际通信中
- JWT结构与使用 - 了解JWT用什么签名算法