ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

数据加解密基础知识

数据加解密基础知识 文章目录数据加解密基础知识笔记为什么要做数据加解密几个必须区分的基础概念加密算法的三大分类对称加密什么是对称加密常见对称加密算法对称加密的优点对称加密的缺点常见使用场景非对称加密什么是非对称加密常见非对称加密算法非对称加密的优点非对称加密的缺点常见使用场景对称加密和非对称加密对比哈希算法什么是哈希算法常见哈希算法哈希和加密的区别密码为什么不能明文存储数字签名什么是数字签名基本流程常见场景数字证书什么是数字证书证书中通常包含常见场景消息认证码什么是消息认证码和数字签名的区别加密模式、填充和 IV加密模式IV填充密钥管理密钥安全原则常见密钥管理方式HTTPS 中的加解密流程大致流程实际开发中的常见应用1. 用户密码存储2. 敏感字段加密3. 接口签名4. 文件加密5. 数据备份常见错误和注意事项1. 把 Base64 当成加密2. 使用 MD5 存储密码3. 密钥写死在代码里4. 每次加密使用相同 IV5. 使用 ECB 模式加密敏感数据6. 只加密不校验完整性7. 日志中打印敏感数据一个实用的算法选择建议简单记忆版数据加解密基础知识笔记为什么要做数据加解密数据加解密的核心目的是保护数据的机密性防止数据在存储、传输、使用过程中被未授权的人读取或篡改。常见场景场景作用用户登录保护密码不能明文存储支付、身份证、手机号防止敏感信息泄露HTTPS 通信保护客户端和服务器之间的数据传输文件存储防止数据库、磁盘、备份文件泄露后数据被直接读取接口签名防止请求被篡改、重放几个必须区分的基础概念概念含义明文原始可读数据密文加密后的数据加密把明文变成密文解密把密文还原成明文密钥加密和解密时使用的关键参数算法加密、解密、哈希、签名所遵循的数学规则编码不是加密例如 Base64主要用于数据格式转换特别注意Base64 不是加密。它只是把二进制数据转成可打印字符任何人都能还原不能用于保护敏感数据。加密算法的三大分类数据加解密通常可以分为三类对称加密非对称加密哈希算法 / 摘要算法另外还会经常结合使用数字签名数字证书消息认证码密钥交换对称加密什么是对称加密对称加密是指加密和解密使用同一个密钥。明文 密钥 → 加密算法 → 密文 密文 密钥 → 解密算法 → 明文常见对称加密算法算法说明AES目前最常用安全性高推荐使用DES早期算法密钥长度短已不安全3DESDES 的改进版性能较差逐渐淘汰SM4国密对称加密算法对称加密的优点加密解密速度快适合加密大量数据常用于文件加密、数据库字段加密、通信数据加密对称加密的缺点密钥需要双方共同持有密钥传输和保存比较困难如果密钥泄露所有数据都可能被破解常见使用场景数据库敏感字段加密文件加密HTTPS 通信中的数据传输加密大文件、大流量数据加密非对称加密什么是非对称加密非对称加密使用一对密钥公钥可以公开私钥必须严格保密常见规则是公钥加密 → 私钥解密 私钥签名 → 公钥验签常见非对称加密算法算法说明RSA应用广泛常用于密钥交换、签名ECC密钥更短性能较好适合移动端和物联网ElGamal常用于某些加密和签名场景SM2国密非对称加密算法非对称加密的优点不需要提前安全传递同一个密钥公钥可以公开私钥自己保存适合解决密钥分发问题适合做数字签名和身份认证非对称加密的缺点计算速度慢不适合直接加密大量数据密钥长度通常比对称加密更长常见使用场景HTTPS 中的密钥交换数字签名登录认证支付接口验签电子合同、证书验证对称加密和非对称加密对比对比项对称加密非对称加密密钥数量一个密钥一对密钥加密速度快慢密钥管理密钥分发困难公钥可公开适合数据量适合大数据适合小数据典型算法AES、SM4RSA、ECC、SM2常见用途数据加密密钥交换、签名、认证实际系统中通常不是单独使用某一种而是组合使用非对称加密安全交换对称密钥 对称加密加密实际业务数据例如 HTTPS 中通常会先用非对称加密协商出一个对称密钥再用对称密钥加密后续通信数据。哈希算法什么是哈希算法哈希算法也叫摘要算法它把任意长度的数据变成固定长度的输出。数据 → 哈希算法 → 固定长度摘要哈希算法有几个重要特点同一个输入通常得到相同输出不同输入理论上可能碰撞但实际很难找到无法从哈希值反推出原始数据输入稍微变化输出会明显变化常见哈希算法算法说明MD5已不安全不建议用于密码存储SHA-1安全性不足逐渐淘汰SHA-256常用安全性较好SHA-512摘要更长安全性更高SM3国密哈希算法哈希和加密的区别对比项加密哈希是否可逆通常可解密不可逆用途保护数据机密性校验完整性、存储密码摘要输出长度与算法和输入有关固定长度典型场景文件加密、通信加密密码存储、文件校验、签名密码为什么不能明文存储用户密码不能直接存成明文否则一旦数据库泄露所有用户密码都会暴露。常见错误做法用户密码123456 数据库存储123456正确做法通常是用户密码 盐值 → 哈希算法 → 存储哈希值其中盐值随机生成的字符串作用是防止相同密码产生相同哈希值防止彩虹表攻击更安全的密码存储通常使用bcryptscryptArgon2PBKDF2这些算法会故意增加计算成本降低暴力破解效率。数字签名什么是数字签名数字签名用于验证数据的完整性来源真实性是否被篡改基本流程1. 对原始数据做哈希 2. 用发送方私钥对哈希值加密形成签名 3. 接收方用发送方公钥解密签名 4. 接收方再对原始数据做哈希 5. 比较两个哈希值是否一致如果一致说明数据没有被篡改数据确实来自持有私钥的一方常见场景支付回调验签接口请求签名软件包校验电子合同证书签发数字证书什么是数字证书数字证书可以理解为一个包含公钥和身份信息的文件由证书颁发机构签发。它主要解决一个问题你怎么知道这个公钥真的属于目标服务器而不是攻击者伪造的证书中通常包含域名或主体信息公钥证书有效期颁发机构信息数字签名常见场景HTTPS 网站证书客户端证书认证企业身份认证电子发票、电子签章消息认证码什么是消息认证码消息认证码用于验证消息完整性和来源通常需要一个共享密钥。常见算法HMACCMACGMAC和数字签名的区别对比项消息认证码数字签名密钥类型对称密钥非对称密钥验证方式双方共享密钥公钥验签适用场景内部系统通信对外接口、证书、签名加密模式、填充和 IV对称加密中除了算法本身还会涉及几个重要概念。加密模式常见模式模式说明ECB相同明文块加密结果相同安全性较差CBC需要 IV安全性比 ECB 好GCM既能加密也能认证推荐使用CTR流式加密模式其中AES-GCM AES-CBC是比较常见的写法。IVIV 是初始化向量用于增加加密随机性。IV 不需要保密但通常要求随机不可预测每次加密尽量不同填充加密算法通常要求数据长度满足一定块大小如果不足就需要填充。常见填充方式PKCS5PaddingPKCS7PaddingNoPadding密钥管理密钥管理是加解密系统中最容易被忽视但最重要的部分。密钥安全原则密钥不能硬编码在代码里密钥不能提交到代码仓库密钥不能写在日志里密钥不能明文存储在配置文件中不同环境使用不同密钥定期轮换密钥限制密钥访问权限常见密钥管理方式环境变量配置中心密钥管理服务硬件安全模块证书管理系统如果密钥泄露加密体系基本就失效了。HTTPS 中的加解密流程HTTPS 是理解加解密组合使用的典型例子。大致流程1. 客户端请求服务器证书 2. 服务器返回证书和公钥 3. 客户端验证证书是否可信 4. 客户端生成对称密钥 5. 客户端用服务器公钥加密对称密钥 6. 服务器用私钥解密得到对称密钥 7. 双方使用对称密钥加密通信数据这里体现了典型组合非对称加密用于安全交换密钥对称加密用于加密实际数据数字证书用于验证服务器身份实际开发中的常见应用1. 用户密码存储不要明文存储也不要只用 MD5。推荐做法密码 随机盐 → bcrypt / Argon2 → 存储结果2. 敏感字段加密例如手机号、身份证、银行卡号可以入库前加密查询时解密展示时脱敏例如138****12343. 接口签名防止请求被篡改。常见流程请求参数排序 → 拼接字符串 → 加盐 → 哈希 → 生成签名4. 文件加密大文件适合使用对称加密例如 AES-GCM。5. 数据备份备份文件建议加密后再存储防止备份泄露导致数据暴露。常见错误和注意事项1. 把 Base64 当成加密Base64 只是编码不能保护数据。2. 使用 MD5 存储密码MD5 速度快容易被暴力破解和彩虹表攻击。3. 密钥写死在代码里代码一旦泄露密钥也会泄露。4. 每次加密使用相同 IV会降低安全性尤其是 CBC 模式。5. 使用 ECB 模式加密敏感数据ECB 模式下相同明文块会产生相同密文块可能泄露数据规律。6. 只加密不校验完整性加密只能保护机密性不能保证数据没被篡改。需要结合 MAC、GCM 或签名。7. 日志中打印敏感数据即使数据库加密了如果日志里打印了明文手机号、密码、密钥仍然会泄露。一个实用的算法选择建议需求推荐方向数据加密AES-GCM、AES-CBC密码存储bcrypt、Argon2、PBKDF2数据完整性校验SHA-256、SHA-512接口签名RSA、ECDSA、HMAC密钥交换RSA、ECDH国密场景SM2、SM3、SM4简单记忆版对称加密同一个密钥速度快适合加密大数据。非对称加密公钥私钥成对适合密钥交换和签名。哈希算法不可逆适合密码存储和完整性校验。数字签名证明数据没被篡改且来自合法发送方。数字证书证明公钥属于某个真实身份或服务器。HTTPS非对称加密交换密钥对称加密传输数据。密钥管理比算法选择更重要密钥泄露则加密失效。
返回列表