密码学

一、加密算法
1、对称加密算法 - AES-Advanced Encryption Standard

  • 是什么?
    AES 就是目前最流行、最安全的对称加密算法,简单说就是加密和解密用同一个密码。
    📌 适用场景(生活 / 工作中常见)

    • 手机 / 电脑锁屏密码:你的手机开机密码,实际是用 AES 加密了手机数据;
    • APP 本地数据存储:比如微信的聊天记录、支付宝的本地缓存,都是 AES 加密;
    • 点对点保密传输:比如你给朋友传保密文件、公司内部系统的敏感数据传输;
    • 物联网设备:智能门锁、摄像头的通信数据,用 AES 加密保证安全。
  • 为什么?
    术语

    • 明文、密文、密钥
    • 密钥长度:长度越长,越安全,破解难度越大
      AES-128:密钥长度 128 位(最常用,手机 / APP / 普通场景);
      AES-192:密钥长度 192 位(中高安全场景,不常用);
      AES-256:密钥长度 256 位(最高安全级别,银行 / 军工 / 政务)
  • 加密流程
    AES 不是简单的 “替换字符”,而是一套标准化的「搅乱流程」,可以理解为给明文做 3 轮 “花式搅乱”,最终变成密文,解密就是反向搅乱:

    • 分组:把明文切成固定大小的 “小块”(每块 128 位),就像把长纸条切成一段一段的;
    • 搅乱:用密钥对每个小块做「替换、移位、混合」操作,把明文的字符顺序、内容彻底打乱;
    • 拼接:把搅乱后的小块重新拼起来,就得到了密文。
      ✅ 重点:不管明文多长,AES 都会按固定规则分组处理,解密时反向操作即可,速度非常快,手机 / 电脑运行毫无压力。
  • 加密模式

    • 模式 1:ECB 模式(有坑,禁止使用)
      💡 大白话:把明文分成小块,每一块用同一个密钥单独加密,就像把蛋糕切成小块,每块都抹同一种果酱。
      ❌ 缺点:如果明文里有重复的内容,加密后的密文也会重复,容易被攻击者找到规律,安全性低。
      👉 适用场景:几乎不用,了解即可,面试会问到。

    • 模式 2:CBC 模式(纯加密场景流行)
      💡 大白话:加密前先加一个「初始向量(IV)」,每一块的加密结果会影响下一块,就像接力赛,前一棒的结果决定后一棒的起跑,彻底避免重复密文。
      ✅ 优点:安全性高,没有 ECB 的漏洞,是目前最常用的模式。
      ✅ 关键:CBC 模式需要两个东西:密钥 + 初始向量(IV),IV 是随机的,长度固定为16字节 - 128 位,不需要保密,但必须和密钥一起用。

    • 模式 3:GCM 模式(加密 + 防篡改 + 防伪造
      💡 CBC 的「升级款」,AES-GCM 是带认证的流加密模式,大白话就是「加密数据的同时,生成一个 “防伪验证码”」,解密时先验这个验证码,验证码不对,直接拒绝解密(说明数据被改了 / 是伪造的),而且它是流加密、不用填充,速度比 CBC 还快,现在行业里基本都用 GCM 替代 CBC 了
      核心三要素:AES-128 密钥 16位/24位/32位 + 12 字节唯一 IV(必选随机生成,可明文传)+16 字节 Tag(加密生成解密验证);
      示例:

      • 你和朋友约定密钥:奶茶不加糖;
      • 你用密钥加密明文「今晚 8 点 XX 餐厅聚餐」,生成密文 + 防伪验证码(Tag 16字节-128位)(比如密文:%@6&*ab9,Tag:123456);
      • 你把「密文 + Tag」一起传给朋友;
      • 朋友收到后,先用密钥验 Tag:
        • ✅ Tag 对得上:说明数据没被改、不是伪造的,正常解密出明文;
        • ❌ Tag 对不上:直接扔掉,不解密,知道数据被动手脚了。
    • 区别:GCM 的 IV 为什么要求「唯一」而不是「随机」?
      大白话理解:同一个密钥下,只要 IV 不重复,即使明文相同,加密后的密文和 Tag 也绝对不同;如果 IV 重复了,黑客能通过对比密文,直接破解出密钥,整个 GCM 加密就等于裸奔了。
      而 CBC 的 IV 只要求随机,不强制唯一(重复了只是密文重复,不会直接泄露密钥),所以GCM 对 IV 的要求更严,但 12 字节的 IV 随机生成,重复的概率比中彩票还低,放心用。

    • 适用场景:

      • HTTPS/TLS:现在的浏览器和服务器通信(TLS1.2/TLS1.3),默认用 AES-GCM 加密,保证网页数据的保密和完整;
      • 物联网设备:智能门锁、摄像头、手环的通信数据,GCM 速度快、轻量,还能防篡改(防止坏人伪造设备指令);
      • 移动端 APP:微信 / 支付宝的聊天记录、支付数据,手机银行的交易数据,都用 GCM 加密;
      • 金融 / 支付:银行卡交易、扫码支付的核心数据,加密的同时保证不被篡改;
      • 大数据传输:流加密速度快,适合大文件 / 大流量数据的加密传输,无填充省步骤。

2、非对称加密

  • 是什么?
    非对称加密的核心是公钥(Public Key)+ 私钥(Private Key) 成对生成,这对钥匙是 “数学绑定” 的 ——公钥加密的内容,只有对应的私钥能解密;私钥签名的内容,只有对应的公钥能验签,反之亦然,而且从公钥推不出私钥,这是安全的核心。

    • 加密 / 解密:公钥加密,私钥解密(核心解决 “密钥安全传输” 问题,配合 AES 用);
    • 签名 / 验签:私钥签名,公钥验签(核心解决 “防抵赖、防篡改”,比如签合同,你用私钥签,别人用你的公钥验,证明是你签的,不是别人伪造的)。
    • 缺点:非对称加密从不直接加密大文件 / 大文本(速度太慢),实际项目中都是非对称加密 + 对称加密结合用(非对称加密 AES 密钥,AES 加密实际数据),这是行业标配!
  • 有对称加密为什么还要非对称加密?
    对称加密使用一把钥匙通加解密,但它有个致命痛点:密钥没法安全传给对方(传的过程中容易被截获),而非对称加密就是专门解决这个问题的 —— 核心是生成一对钥匙(公钥 + 私钥),公钥随便给人,私钥自己藏好,加密 / 解密、签名 / 验签用不同的钥匙,完美解决密钥传输和身份认证问题。
    非对称加密的解决方案(公钥随便传,私钥自己藏)

    • 朋友先生成一对钥匙:私钥(自己藏在口袋里,绝对不给人)+ 公钥(写在纸上,贴在大街上,谁都能拿);
    • 你拿朋友的公钥,把 AES 密钥 “奶茶不加糖” 加密成乱码,传给朋友;
    • 坏人就算截获了乱码,也只有朋友的私钥能解密,拿到真正的 AES 密钥;
    • 你和朋友用解密后的 AES 密钥,加密聚餐纸条(非对称加密速度慢,一般不直接加密大内容,只加密 AES 密钥,这是行业通用玩法!)。
  • 分类
    目前主流的非对称加密算法分两类:

    • 一类是加密 + 签名都能做的通用型(RSA、ECC),RSA 是老大哥(兼容性拉满),ECC(椭圆曲线)是新主流(更安全、更轻量,现在首选);
    • 一类是只做签名 / 验签的专用型(DSA、ECDSA),ECDSA 替代了老旧的 DSA,是目前数字签名的标配。

    (1)ECC(椭圆曲线加密,Elliptic Curve Cryptography)—— 新主流,首选
    ECC 是目前最推荐的非对称加密算法,也是未来的趋势,核心基于椭圆曲线离散对数难题),最大的优势是:同样的安全级别下,ECC 的密钥长度比 RSA 小得多,速度更快、更轻量,特别适合移动端、物联网、区块链等对性能 / 存储空间有要求的场景。

    • 对比 RSA:
      • 256 位的 ECC 密钥 ≈ 2048 位的 RSA 密钥(安全级别基本一致);
      • 密钥小:256 位 ECC 密钥比 2048 位 RSA 密钥小近 10 倍,存储 / 传输更方便;
      • 速度快:加解密 / 签名验签的速度比 RSA 快 2-5 倍,移动端 / 物联网设备跑起来毫无压力。
    • 常用密钥长度
      • 256 位(主流,大部分场景够用,手机 / APP / 物联网 / HTTPS);
      • 384 位(高安全场景,金融 / 政务);
      • 521 位(最高安全级别,军工 / 核心机密)。
    • 适用场景(现在的主流,能选 ECC 就不选 RSA)
      • HTTPS/TLS1.3(现在浏览器默认用 ECC 握手,替代 RSA);
      • 移动端 APP(微信 / 支付宝 / 手机银行的身份认证、签名);
      • 物联网(智能门锁 / 摄像头 / 手环的密钥协商、签名);
      • 区块链(比特币 / 以太坊的钱包地址、交易签名,用的是 ECC 的 secp256k1 曲线);
      • 数字证书(新申请的 SSL 证书,基本都是 ECC 类型,比 RSA 证书小);
      • 轻量级设备(单片机 / 传感器,存储空间小,跑不动大的 RSA 密钥)。
        (2)RSA-老大哥,兼容性拉满
        RSA 是最经典的非对称加密算法,由三位数学家发明(Rivest+Shamir+Adleman),名字就是三人首字母,核心基于大质数分解难题—— 大白话就是:“把两个超大的质数乘起来得到一个数,很容易;但反过来,把这个大数分解成两个原始质数,极难”,目前 2048 位以上的 RSA 密钥,全世界的计算机都无法暴力破解。
        RSA 是过去几十年的非对称加密 “扛把子”,兼容性无敌,所有系统 / 编程语言 / 设备都支持,现在虽然被 ECC 赶超,但老系统 / 老设备还在广泛使用,是 “兜底选择”
    • 常用密钥长度
      • ❌ 1024 位:2015 年后就被证明可以被破解,绝对不能用!
      • 2048 位(主流,老系统 / 兼容性要求高的场景);
      • 4096 位(高安全场景,金融 / 政务,不推荐用,密钥大、速度慢,不如用 256 位 ECC);
    • 核心特点
      • 优点:兼容性无敌,任何设备 / 语言都支持,开发不用考虑适配问题;
      • 缺点:密钥大、速度慢,2048 位 RSA 的加解密速度比 256 位 ECC 慢很多,不适合轻量级设备。
    • 适用场景
      • 老系统 / 老设备的密钥协商、加密(比如传统金融系统、旧版服务器);
      • 兼容性要求极高的场景(比如需要适配各种老旧终端的系统);

二、哈希算法
哈希算法(Hash Algorithm)是密码学和数据处理的基础工具,它不等同于加密算法 —— 它无密钥、不可逆、把任意长度数据变成固定长度的哈希值,核心作用是做数据指纹、完整性校验、密码存储,是加解密体系的 “黄金辅助”,但绝对不是加密算法(加密算法是可逆的)。

  • 是什么?
    任意长度的原始数据(小到一个字符,大到几个 G 的文件),通过哈希算法,计算出一个固定长度、唯一的字符串(哈希值 / 散列值 / 摘要),这个哈希值就像数据的 “数字指纹”—— 指纹能唯一标识人,哈希值能唯一标识原始数据(理想状态)。
    核心特点:

    • 固定长度:输入任意长,输出都一样长
    • 正向快速:计算哈希值快,反向推不出原始数据
    • 雪崩效应:输入改一点,哈希值全变
    • 抗碰撞性:不同输入,几乎不可能算出相同哈希值
  • 哈希算法的实际应用

    • 应用 1:密码存储(最核心的安全场景,绝对不能存明文)
      这是哈希算法最经典的应用 ——网站 / APP 绝对不会存储你的明文密码,只会存储密码的哈希值,这是行业铁律。

      • 核心流程(以 SHA-256 + 加盐为例)
        • 你注册账号,输入密码123456;
        • 服务器生成一个随机的盐值(Salt)(比如abc123),把密码 + 盐值拼接(123456abc123);
        • 服务器用 SHA-256 计算拼接后的数据的哈希值,得到f987654321abcdef...;
        • 服务器只存储盐值和哈希值,不存储任何明文密码;
        • 你登录时,输入密码123456,服务器用相同的盐值拼接,计算哈希值,和存储的哈希值对比 —— 相同则登录成功,不同则失败。
      • 关键:为什么要 “加盐”?
        防止彩虹表破解—— 黑客会提前计算出大量常见密码的 MD5/SHA-256 哈希值,做成 “彩虹表”,如果密码不加盐,黑客可以通过哈希值反向匹配出明文密码;加盐后,哪怕是常见密码,哈希值也会完全不同,彩虹表彻底失效。✅ 示例:密码123456的 SHA-256 哈希值是固定的,但加盐abc123后,哈希值就变了,加盐def456后,哈希值又变了,每个用户的盐值都不同,彻底防彩虹表。
      • 为什么不用加密存储密码?
        加密是可逆的,如果服务器的加密密钥泄露,黑客可以解密出所有用户的明文密码;而哈希是不可逆的,哪怕哈希值泄露,黑客也推不出明文密码,安全性更高。
    • 应用 2:数字签名的 “前置步骤”(和非对称加密配合,核心)
      之前讲非对称加密的签名 / 验签时,提到 “非对称加密从不直接加密大数据”,数字签名也是如此 ——不会直接用私钥对原始数据签名,而是先对原始数据做哈希,再用私钥对哈希值签名,哈希在这里起到 “压缩数据、保证完整性” 的核心作用。

      • 数字签名完整流程(ECC 私钥 + SHA-256,行业标配)
      • 哈希的核心作用
        • 压缩数据:把大数据变成 64 个字符的哈希值,非对称签名速度提升上万倍;
        • 保证完整性:如果合同被篡改,哪怕改一个字,哈希值就会全变,验签必然失败,无法伪造。
          ✅ 这是哈希 + 非对称加密的经典配合,也是 HTTPS、电子合同、区块链签名的核心原理。
    • 应用 3:数据完整性校验(生活中最常见,比如下载文件 / 传文件)

      • 你下载软件、电影、安装包时,网站会给出一个哈希值(如 SHA-256),这就是用哈希算法做数据完整性校验,防止文件被篡改、被植入病毒;
      • 网盘 / U 盘传文件:怕文件损坏,计算哈希值对比,确认文件完整;
      • 区块链区块校验:每个区块链区块都包含上一个区块的哈希值,一旦某个区块被篡改,后续所有区块的哈希值都会变,全网节点校验会失败,保证区块链的不可篡改。
    • 应用 4:区块链的 “核心基石”(哈希 + 加密的极致结合)
      区块链的不可篡改、去中心化特性,完全基于哈希算法的特性,以比特币为例:

      • 区块哈希:每个区块包含交易数据、时间戳、上一个区块的哈希值,用 SHA-256 计算出当前区块的哈希值 —— 如果修改区块内的任何交易数据,区块哈希值会全变,后续所有区块的哈希值也会变,全网节点会拒绝这个篡改后的区块;
      • 交易哈希:每笔比特币交易都用 SHA-256 计算哈希值,唯一标识一笔交易,防止交易被伪造;
      • 钱包地址:比特币的钱包地址,是通过 ECC 公钥做 SHA-256+RIPEMD160 哈希计算后得到的,不可逆,保证钱包地址的安全。
    • 应用 5:普通数据处理(非安全场景,哈希表 / 数据索引)
      哈希算法不仅用于密码学,还用于普通的程序开发,比如编程语言中的哈希表(HashMap/HashTable),核心是用哈希算法计算数据的哈希值,作为数据的索引,实现O (1) 时间复杂度的增删改查,提升程序效率。
      示例:Java 中的HashMap,用键(Key)的哈希值计算存储位置,快速找到值(Value);
      特点:这里用的哈希算法(如 Java 的 Object.hashCode ())是非安全型的,不要求抗碰撞性,只要求计算速度快,和密码学哈希算法不同。

posted @ 2026-02-01 21:03  cac2020  阅读(1)  评论(0)    收藏  举报