# 密码学基础速查:哈希 / 对称加密 / 非对称加密 > 一句话区分: > **哈希:单向摘要,不可解密;对称:同一密钥加密解密;非对称:公私钥一对,公钥加密、私钥解密。** ## 一、哈希(Hash,消息摘要) ### 核心特性 1. **单向不可逆**:只能原文算出摘要,**不能从摘要反推原文** 2. 定长输出:无论输入长短,输出固定长度字符串 3. 雪崩效应:原文改1个字符,哈希结果完全不同 4. 抗碰撞:很难找到两段不同原文,哈希值相同 ### 常见算法 - 不安全(禁止使用):MD5、SHA1(存在碰撞攻击) - 推荐:SHA256、SHA3、BLAKE2b > ⚠️ 哈希 ≠ 加密!**没有解密过程**。 ### 典型用途 1. 用户密码存储:密码+随机盐 → 计算哈希存入数据库(**不能直接存MD5,必须加盐**) 2. 文件完整性校验:校验文件是否被篡改 3. 数字签名的前置:先对消息哈希,再对哈希签名 ### 易错点 - ❌ 直接对密码做MD5:彩虹表可破解;**必须加盐(salt)** - 加盐公式:`hash(密码 + 随机盐)`,盐值和哈希一起入库,盐不需要保密 ## 二、对称加密(Symmetric Encryption) ### 核心特性 - **加密、解密使用同一个密钥** - 加解密速度快,适合加密**大数据**(文件、数据流) - 痛点:密钥分发困难;双方如何安全传递密钥是最大难题 ### 常见算法 - AES(首选,AES-128/AES-256) - 淘汰:DES、3DES ### 关键概念 - IV(初始化向量):随机、不可重复,不需要保密;**相同密钥+相同IV会产生相同密文**,每次加密必须使用新随机IV - 模式:GCM(推荐,自带完整性校验;认证加密);CBC(旧方案,需要额外MAC校验完整性) ### 典型用途 - 传输/存储大量业务数据、数据库敏感字段、文件加密 - HTTPS内部传输层流量(TLS握手后,使用对称加密传输业务数据) ### 安全要点 1. 密钥必须使用密码学安全随机数生成 2. 禁止硬编码密钥在代码中 3. 优先 GCM,不要使用 ECB(ECB不安全,相同明文得到相同密文) ## 三、非对称加密(Asymmetric / 公钥密码) 一对密钥:**公钥(Public Key)、私钥(Private Key)** - 公钥:公开分发 - 私钥:自己保管,绝不外泄 ### 两条核心能力 1. **公钥加密,私钥解密**(加密,用于保密传输) > A拿B的公钥加密消息 → 只有B的私钥能解开 2. **私钥签名,公钥验签**(数字签名,用于证明身份、防篡改) > A用自己私钥对消息摘要签名 → 任何人可用A公钥验证:消息是A发出,未被篡改 ### 常见算法 - RSA(最常用) - ECC椭圆曲线:ECC-256,同等安全强度,密钥更短,计算更快(推荐) > ⚠️ 非对称**速度很慢**,不适合直接加密大文件。 > 标准做法:**非对称加密AES密钥,AES加密真实数据(混合加密)** ### 典型用途 1. TLS/HTTPS证书(RSA/ECC) 2. 数字签名(API验签、软件签名) 3. 密钥交换:安全传递对称加密密钥 ## 四、三者对比速查表 |类型|可逆|密钥|速度|适用场景| |---|---|---|---|---| |哈希Hash|❌不可逆|无密钥|极快|完整性校验、密码存储(加盐)| |对称加密|✅可逆|单密钥,双方共用|快,适合大数据|加密文件、业务数据、TLS传输| |非对称加密|✅可逆|公私钥成对|慢,只适合小数据|密钥交换、数字签名、身份认证| ## 五、实战组合(开发最常用) **混合加密(HTTPS逻辑)** 1. 客户端生成随机AES对称密钥 2. 使用服务器公钥加密AES密钥(非对称,传递密钥) 3. 业务数据用AES-GCM加密(对称,加密大量数据) 4. 传输密文+加密后的AES密钥 5. 服务器用私钥解密拿到AES密钥,再解密业务数据 **密码存储** 用户密码 + 随机盐 → Bcrypt/Argon2id(带盐哈希算法,专门用于密码),存入数据库。 > 不要自己拼接盐+SHA256,优先使用专门密码哈希算法:Argon2id > bcrypt > PBKDF2 ## 六、高频踩坑清单(安全代码评审重点) 1. 密码直接MD5/SHA1,无盐:高危 2. AES使用ECB模式,或者IV固定写死:高危 3. RSA直接加密大段明文:错误,RSA只能加密短数据 4. 哈希用于加密,尝试“解密哈希”:概念错误 5. 签名直接对原文签名(应先hash再签名) 6. 私钥明文硬编码、上传代码仓库:高危 ## 一句话速记 哈希做摘要验完整性;对称加密用来加密大量数据;非对称负责密钥交换和数字签名;工程上一般三者组合使用。