






















一、加密算法
1、对称加密算法 - AES-Advanced Encryption Standard
是什么?
AES 就是目前最流行、最安全的对称加密算法,简单说就是加密和解密用同一个密码。
📌 适用场景(生活 / 工作中常见)
为什么?
术语
加密流程
AES 不是简单的 “替换字符”,而是一套标准化的「搅乱流程」,可以理解为给明文做 3 轮 “花式搅乱”,最终变成密文,解密就是反向搅乱:
加密模式
模式 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(加密生成解密验证);
示例:
区别:GCM 的 IV 为什么要求「唯一」而不是「随机」?
大白话理解:同一个密钥下,只要 IV 不重复,即使明文相同,加密后的密文和 Tag 也绝对不同;如果 IV 重复了,黑客能通过对比密文,直接破解出密钥,整个 GCM 加密就等于裸奔了。
而 CBC 的 IV 只要求随机,不强制唯一(重复了只是密文重复,不会直接泄露密钥),所以GCM 对 IV 的要求更严,但 12 字节的 IV 随机生成,重复的概率比中彩票还低,放心用。
适用场景:
2、非对称加密
是什么?
非对称加密的核心是公钥(Public Key)+ 私钥(Private Key) 成对生成,这对钥匙是 “数学绑定” 的 ——公钥加密的内容,只有对应的私钥能解密;私钥签名的内容,只有对应的公钥能验签,反之亦然,而且从公钥推不出私钥,这是安全的核心。
有对称加密为什么还要非对称加密?
对称加密使用一把钥匙通加解密,但它有个致命痛点:密钥没法安全传给对方(传的过程中容易被截获),而非对称加密就是专门解决这个问题的 —— 核心是生成一对钥匙(公钥 + 私钥),公钥随便给人,私钥自己藏好,加密 / 解密、签名 / 验签用不同的钥匙,完美解决密钥传输和身份认证问题。
非对称加密的解决方案(公钥随便传,私钥自己藏)
分类
目前主流的非对称加密算法分两类:
(1)ECC(椭圆曲线加密,Elliptic Curve Cryptography)—— 新主流,首选!
ECC 是目前最推荐的非对称加密算法,也是未来的趋势,核心基于椭圆曲线离散对数难题),最大的优势是:同样的安全级别下,ECC 的密钥长度比 RSA 小得多,速度更快、更轻量,特别适合移动端、物联网、区块链等对性能 / 存储空间有要求的场景。
二、哈希算法
哈希算法(Hash Algorithm)是密码学和数据处理的基础工具,它不等同于加密算法 —— 它无密钥、不可逆、把任意长度数据变成固定长度的哈希值,核心作用是做数据指纹、完整性校验、密码存储,是加解密体系的 “黄金辅助”,但绝对不是加密算法(加密算法是可逆的)。
是什么?
任意长度的原始数据(小到一个字符,大到几个 G 的文件),通过哈希算法,计算出一个固定长度、唯一的字符串(哈希值 / 散列值 / 摘要),这个哈希值就像数据的 “数字指纹”—— 指纹能唯一标识人,哈希值能唯一标识原始数据(理想状态)。
核心特点:
哈希算法的实际应用
应用 1:密码存储(最核心的安全场景,绝对不能存明文)
这是哈希算法最经典的应用 ——网站 / APP 绝对不会存储你的明文密码,只会存储密码的哈希值,这是行业铁律。
应用 2:数字签名的 “前置步骤”(和非对称加密配合,核心)
之前讲非对称加密的签名 / 验签时,提到 “非对称加密从不直接加密大数据”,数字签名也是如此 ——不会直接用私钥对原始数据签名,而是先对原始数据做哈希,再用私钥对哈希值签名,哈希在这里起到 “压缩数据、保证完整性” 的核心作用。
应用 3:数据完整性校验(生活中最常见,比如下载文件 / 传文件)
应用 4:区块链的 “核心基石”(哈希 + 加密的极致结合)
区块链的不可篡改、去中心化特性,完全基于哈希算法的特性,以比特币为例:
应用 5:普通数据处理(非安全场景,哈希表 / 数据索引)
哈希算法不仅用于密码学,还用于普通的程序开发,比如编程语言中的哈希表(HashMap/HashTable),核心是用哈希算法计算数据的哈希值,作为数据的索引,实现O (1) 时间复杂度的增删改查,提升程序效率。
示例:Java 中的HashMap,用键(Key)的哈希值计算存储位置,快速找到值(Value);
特点:这里用的哈希算法(如 Java 的 Object.hashCode ())是非安全型的,不要求抗碰撞性,只要求计算速度快,和密码学哈希算法不同。
1、SHA-2 家族(安全型,必用)
SHA(Secure Hash Algorithm,安全哈希算法)是美国 NIST 发布的标准,SHA-2 家族是目前全球最主流、最安全的哈希算法,彻底替代了 MD5 和 SHA-1,分为 SHA-224、SHA-256(首选)、SHA-384、SHA-512等,数字代表哈希值的位数,其中SHA-256是绝对主流,覆盖 99% 的安全场景。
SHA-256
任意长度(0 ~ 2^64-1 位)的原始数据(小到 1 个字符,大到 10G 文件),通过固定的算法规则转换为256 位(32 字节)的固定长度二进制哈希值,开发中最常用64 个十六进制字符表示(1 个十六进制字符 = 4 位二进制,64×4=256 位)。
SHA256 计算流程
2、区块链专用:Keccak-256(SHA-3 的核心)
Keccak-256 是基于Keccak 算法实现的 256 位哈希算法,是NIST(美国国家标准与技术研究院)选定的 SHA-3 标准核心实现(SHA-3 是哈希算法标准,Keccak 是该标准的底层算法),核心作用是将任意长度(0 ~ 2^1600 位)的原始数据转换为256 位(32 字节)的固定长度哈希值,开发中常用64 个十六进制字符表示(和 SHA256 输出格式一致)。
但是Keccak-256 ≠ SHA3-256(开发最易踩坑)。
核心特点
使用场景:
选型建议
Keccak-256 计算流程:海绵函数的「吸收 + 挤压」
核心前置:海绵函数的基本逻辑
海绵函数就像一块海绵吸水再挤水:
吸收阶段:把任意长度的输入数据 “吸进” 算法的状态矩阵,逐步更新矩阵状态;
挤压阶段:从更新后的状态矩阵中 “挤出” 固定长度的输出数据(即哈希值);
核心特点:输入可长可短,输出也可长可短,灵活性远超 SHA256 的固定分块结构。
步骤 1:数据预处理 —— 以太坊定制的「101」填充规则(最关键)
Keccak-256 的预处理只有一步填充,且以太坊有定制化规则,这是和标准 SHA3-256、SHA256 最大的区别,开发中必须严格遵循,否则哈希值会错误!
定分块大小:Keccak-256 的输入分块大小为1088 位(由算法参数决定:容量 = 512 位,速率 = 1088 位,总状态 = 1600 位 = 5x5x64);
以太坊填充规则(101):在原始数据的二进制末尾,先补 1 个二进制位1,再连续补若干个二进制位0,直到数据长度成为1088 位的整数倍,无任何后缀(标准 SHA3-256 会在最后补11101,以太坊直接省略);
✅ 示例:输入空字符串""(0 位),补 1 个1 + 1087 个0,总长度为 1088 位(1 个分块);
✅ 示例:输入123(24 位),补 1 个1 + 1063 个0,总长度为 1088 位。
步骤 2:初始化状态矩阵 ——5x5x64 位的全 0 矩阵
Keccak-256 的核心计算载体是5x5x64 位的三维状态矩阵(共 5564=1600 位),计算前将矩阵所有位初始化为0,作为初始状态。
步骤 3:吸收阶段 —— 逐块更新状态矩阵
将预处理后的 1088 位整数倍数据,按 1088 位为 1 个分块进行拆分;
对每个分块,执行位运算混淆后,将分块数据 “吸收” 到 5x5x64 的状态矩阵中,更新矩阵的位状态;
重复上述步骤,直到所有分块都被吸收,此时状态矩阵的状态已完全由输入数据决定。
步骤 4:挤压阶段 —— 生成 256 位哈希值(以太坊固定输出)
吸收阶段完成后,从最终的 5x5x64 状态矩阵中,按顺序提取前 256 位二进制数据;
将这 256 位二进制数据转换为64 个十六进制字符,就是以太坊专用的 Keccak-256 哈希值。
✅ 核心总结:Keccak-256 的计算流程核心是海绵函数的吸收 + 挤压,开发中唯一需要关注的是以太坊的 10*1 填充规则,确保使用的第三方库是以太坊定制版 Keccak-256,而非标准 SHA3-256。
开发实现
和SHA256不同,几乎所有语言都没有原生的 Keccak-256 库,需要引入第三方密码学库(如 Java 的 BouncyCastle、Python 的 pycryptodome),且必须确保使用的是以太坊定制版(10*1 填充),而非标准 SHA3-256
三、签名算法
数字签名算法不是单独的算法,而是 **「哈希算法 + 非对称加密」的组合体 **,核心解决传统签名的「易伪造、难验证、可抵赖」问题,是现代密码学的核心应用,也是区块链、电子合同、HTTPS、智能合约的安全基石
数字签名是什么?
数字签名的 3 个核心价值
数字签名的通用流程
签名端(生成签名)
核心原则:私钥仅由签名者持有,绝对不泄露,步骤如下:
验签端(验证签名)
核心原则:公钥可以公开传播,任何人都能获取,步骤如下:
算法 1:ECDSA(椭圆曲线数字签名算法)—— 现在的绝对主流
ECDSA(Elliptic Curve Digital Signature Algorithm)是基于 ECC 椭圆曲线非对称加密的签名专用算法,也是目前全球使用最广泛的数字签名算法,彻底替代了老旧的 DSA,是区块链、移动端、HTTPS、智能合约的标配。
算法2:Ed25519
Ed25519 是基于爱德华曲线(Edwards Curve)的椭圆曲线数字签名算法,属于EdDSA(爱德华曲线数字签名算法)家族的核心实现,是目前密码学领域的新一代主流签名算法—— 它解决了 ECDSA-secp256k1 的诸多痛点(如依赖安全随机数、易受侧信道攻击、效率偏低),兼具更高的安全性、更快的运算速度、更简洁的密钥 / 签名格式,目前已广泛应用于 Solana/Cardano 等区块链、SSH/TLS1.3、Signal 加密通信、Docker 等场景,是替代 ECDSA-secp256k1 的重要选择。核心作用是用 32 字节私钥生成 32 字节公钥,对任意长度消息生成 64 字节签名,实现高效、安全的数字签名,无随机数依赖、天生抗侧信道攻击是其核心亮点。
核心设计
Ed25519 的底层是Curve25519(2005 年设计的椭圆曲线),这是一条专为密码学优化的曲线,而 Ed25519 是将 Curve25519 转换为爱德华曲线形式后实现的签名算法(蒙哥马利曲线适合密钥交换,爱德华曲线适合签名,二者可互相转换,公私钥通用)。
对比DCDSA-secp256k1
Ed25519 核心前置:密钥对生成流程
Ed25519 的私钥是32 字节种子,公钥由种子通过SHA-512 哈希 + 椭圆曲线运算派生,全程确定性生成(同一种子始终生成同一对公钥私钥)。
加签 & 验签完整流程
开发库
学习技术不是用来写HelloWorld和Demo的,而是要用来解决线上系统的真实问题的.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。