沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 设计须知

    • 命名规范
    • 聊聊什么是耦合度
    • 幂等性问题分析
    • LocalDateTime和DateTime
    • 聊聊软件架构设计
    • 说说war和jar的区别
    • 聊聊多租户是什么
    • 加密算法分析
      • 对称加密、非对称加密、摘要算法有哪些?
        • 分类与用途总览
        • 对称加密(Symmetric Encryption)
        • 非对称加密(Asymmetric Encryption)
        • 摘要算法(Hash / Digest)
        • 三者核心区别对比表
      • RSA vs AES
        • AES 加密(对称加密)
        • RSA 加密(非对称加密)
        • 实际场景中怎么选?
        • 总结
        • 举例说明
        • RSA 和 AES 加密效率差异
      • XXTEA 加密算法
        • XXTEA 简介
        • XXTEA 加密流程简要描述
        • 应用场景
        • 与 AES、TEA 对比
        • 使用方式(加密解密)
        • 总结
      • 不可逆算法
        • 定义
        • 常见不可逆算法(哈希函数)
        • 常见用途
        • 不可逆 ≠ 不可验证
        • 常见误区
        • 总结
    • 那些关于管理系统的知识
    • 唯一索引和逻辑删除冲突解决方法
    • 日志记录相关
  • UML画图

  • 权限校验

  • 设计模式

  • 系统设计
  • 设计须知
沉梦听雨
2025-07-10
目录

加密算法分析

# 加密算法分析

# 对称加密、非对称加密、摘要算法有哪些?

对称加密传内容,非对称传密钥,摘要算法保完整性。

  • AES 快、RSA 安、SHA256 稳。
  • 常用组合:SHA256 摘要 + RSA 签名、HTTPS = RSA + AES + SHA256

# 分类与用途总览

类型 代表算法 用途示例
✅ 对称加密 AES、DES、3DES、SM4、XXTEA 数据加密传输、本地数据加密
✅ 非对称加密 RSA、ECC、DSA、SM2 登录鉴权、数字签名、密钥交换
✅ 摘要算法 MD5、SHA1、SHA256、SM3 数据完整性校验、签名、密码存储

# 对称加密(Symmetric Encryption)

特点

  • 加密 & 解密使用 同一个密钥
  • 加解密速度快
  • 密钥分发是最大问题(必须安全传输密钥)

常见算法

算法 简介
AES 现代最常用,安全性高,推荐使用
DES 老旧,已不安全,不推荐
3DES DES 的升级版,更安全但较慢
SM4 中国国家密码算法(国密)
XXTEA 轻量级加密,适合嵌入式设备

用途举例

  • HTTPS 中对称加密用于加密通信内容(协商密钥后)
  • 本地配置加密、数据库字段加密、App本地数据加密

# 非对称加密(Asymmetric Encryption)

特点

  • 使用一对密钥:公钥(加密)、私钥(解密)
  • 加密/解密速度慢
  • 可用于:加密、签名、身份验证

常见算法

算法 简介
RSA 最常用非对称算法,安全性好,应用广泛
ECC 更短密钥同样安全,适合移动端
DSA 数字签名算法
SM2 中国国家密码算法(国密)

用途举例

  • 登录验证(RSA 加密登录信息)
  • 数字签名(防篡改、身份确认)
  • 密钥协商(用来传递对称加密的密钥)

# 摘要算法(Hash / Digest)

特点

  • 不可逆运算:从结果无法还原原文
  • 用于校验数据完整性
  • 输出为定长字符串(如 SHA256 输出 256 bit)

常见算法

算法 简介
MD5 128bit,快,但已被破解(不安全)
SHA1 160bit,已不安全
SHA256 256bit,安全,推荐使用
SHA3 新一代 SHA 系列
SM3 国密摘要算法,类似 SHA256

用途举例

  • 密码加盐+摘要存储:password -> salt -> SHA256
  • 文件校验(如上传后 MD5 校验)
  • 数字签名(摘要 + 私钥签名)

# 三者核心区别对比表

特性 对称加密 非对称加密 摘要算法
密钥数量 1(对称密钥) 2(公钥+私钥) 无密钥
是否可逆 ✅ 是 ✅ 是 ❌ 不可逆
速度 ⚡ 非常快 🐢 较慢 ⚡ 非常快
用途 数据加解密 密钥协商、签名 完整性校验、签名
安全性 依赖密钥安全 依赖数学难题 防篡改,无法反推原文

# RSA vs AES

RSA 和 AES 是两种常用但原理、用途截然不同的加密算法,一个用于“非对称加密”,一个用于“对称加密”,在实际项目中经常配合使用。

# AES 加密(对称加密)

原理:

  • 加密和解密使用相同的密钥(对称密钥);
  • 加密速度快,适合处理大量数据。

特点:

特点 说明
加解密速度快 适合大数据量加密,例如文件、图片、音视频
密钥分发是难点 加密和解密用的是同一个密钥,必须安全传输

# RSA 加密(非对称加密)

原理:

  • 使用一对密钥:公钥和私钥。
  • 用公钥加密,私钥解密(或反过来做签名校验);
  • 公钥可以公开,但私钥必须保密。

特点:

特点 说明
加解密速度慢 不适合加密大数据
解决密钥分发问题 公钥可以公开,私钥留在自己手里

# 实际场景中怎么选?

常见组合:RSA + AES 混合加密

这是我们在 HTTPS / 文件传输 / 登录系统 中常见的模式:

  1. 服务端生成一个随机的 AES 密钥;
  2. 用客户端的 RSA 公钥加密 AES 密钥;
  3. 客户端用自己的 RSA 私钥解密得到 AES 密钥;
  4. 双方后续通过 AES 对称加密传输数据;

# 总结

场景 使用方案 原因说明
大量数据传输(如视频) AES 快速高效,对称加密适合大数据
密钥交换、身份验证 RSA 解决密钥分发,提供签名功能
综合应用(如 HTTPS) RSA + AES 混合加密 结合两者优点:RSA 传密钥,AES 传数据

# 举例说明

  • HTTPS:客户端通过 RSA 获取服务端的 AES 密钥,后续数据用 AES 加密;
  • JWT 签名:RSA 私钥签名,公钥验证(确保来源可信);
  • 支付接口加密:请求体用 AES 加密,AES 密钥用 RSA 加密;

# RSA 和 AES 加密效率差异

算法 加密速度 数据大小限制 密钥管理
AES 非常快 不限 难管理(要安全传输)
RSA 慢 限制(比如2048位密钥只能加密245字节) 易于管理(公钥可公开)

# XXTEA 加密算法

XXTEA 是一种轻量级、对称加密算法,全称为 Corrected Block TEA(Tiny Encryption Algorithm),它是 TEA 算法的改进版,专为小块数据加密设计,尤其适用于嵌入式设备或资源受限的场景。

# XXTEA 简介

类型:

  • 对称加密(加密和解密使用相同密钥)

特点:

特性 说明
轻量级 算法简单,代码量小(适合嵌入式、前端)
对称加密 加解密使用相同密钥
定长分组 输入被分割成固定大小的块(32bit/块)
支持变长数据 相比 TEA 修复了加密长度限制问题
不可逆性强 安全性高于 TEA,但仍低于 AES

# XXTEA 加密流程简要描述

  1. 将待加密数据按 32 位分组,组成整数数组;
  2. 使用固定的轮次进行整数之间的位运算(移位、加减、异或);
  3. 解密过程则反向执行相同轮次的操作;
  4. 密钥是 128 位(16 字节),可看作是 4 个 32 位整数。

# 应用场景

场景 说明
前端加密通信 小程序 / JS 中使用,便于前端加密参数
嵌入式设备 资源有限不适合用 AES 的场景
客户端签名 对传输数据加密,防止伪造和篡改

# 与 AES、TEA 对比

算法 加密类型 安全性 资源消耗 备注
AES 对称加密 非常高 较高 行业标准
TEA 对称加密 已发现弱点 非常低 轻量但不推荐
XXTEA 对称加密 优于 TEA 非常低 安全性在 AES 之下,适合轻量场景;加解密速度非常快

# 使用方式(加密解密)

String key = "1234567890abcdef"; // 16 字节密钥
String data = "Hello, XXTEA!";

// 加密
byte[] encryptData = XXTEA.encrypt(data.getBytes(StandardCharsets.UTF_8), key.getBytes());
String base64Encrypted = Base64.getEncoder().encodeToString(encryptData);

// 解密
byte[] decryptData = XXTEA.decrypt(Base64.getDecoder().decode(base64Encrypted), key.getBytes());
String result = new String(decryptData, StandardCharsets.UTF_8);
1
2
3
4
5
6
7
8
9
10

# 总结

  • XXTEA 是轻量级、对称加密算法,主要优势是小巧、易于嵌入,适合 前端加密、嵌入式通信、小游戏、小程序中保护参数。
  • 如果对安全性要求非常高,建议优先考虑 AES + HTTPS 或非对称加密方案。

# 不可逆算法

不可逆算法(Irreversible Algorithm),通常指无法通过 输出 推导出 输入的算法,常见于加密和安全领域,最典型的就是 哈希函数(Hash Function)。

# 定义

不可逆算法的核心特点是:

  • 不可逆:从输出值无法还原出原始输入;
  • 确定性:相同输入始终输出相同结果;
  • 抗碰撞:不同输入不应产生相同输出(哈希冲突概率极低);
  • 雪崩效应:输入的微小变化导致输出完全不同。

# 常见不可逆算法(哈希函数)

  1. MD5(Message Digest 5)
  • 输出长度:128 位(16 字节)
  • 优点:计算快,广泛使用;
  • 缺点:已被破解,不适合安全场景(存在碰撞攻击);
  • 应用场景:文件校验、数据库唯一标识。
  1. SHA 系列(Secure Hash Algorithm)
  • SHA-1:输出 160 位(20 字节),比 MD5 稍安全,但也被逐步淘汰,已被破解;
  • SHA-256/SHA-512:输出 256/512 位,目前安全性更高;
  • 应用场景:密码存储、区块链、签名验证等。
  1. bcrypt
  • 加盐哈希算法(加入随机 salt 提升安全);
  • 适合密码加密存储;
  • 内部使用 Blowfish 加密算法;
  • 支持自定义迭代轮数,计算成本高,抵抗暴力破解。
  1. scrypt / Argon2
  • 现代密码哈希算法,加入内存消耗限制;
  • Argon2 是密码学比赛冠军,现代系统中推荐使用。

# 常见用途

场景 不可逆算法的作用
密码加密 存储用户密码的哈希值,避免明文泄露
数据签名 数字签名中先做摘要,再签名(比如密钥)
文件校验 验证文件完整性(如 MD5 校验码)
区块链 区块 Hash 确保链条安全、不可篡改
防篡改 验证数据是否被更改(如日志签名)

# 不可逆 ≠ 不可验证

虽然算法不可逆,但可通过“比对哈希值”来验证输入是否一致。例如密码验证流程:

  • 不需要解密原始密码,提升安全性。
用户输入密码 -> 哈希加密 -> 与数据库中加密后的密码比对
1

# 常见误区

误区 正解
不可逆 = 安全 不是,像 MD5、SHA-1 已被破解
不可逆无法验证 可以通过哈希比对验证
不可逆不能被暴力破解 如果不加 salt 或计算慢,仍可被彩虹表攻击

# 总结

  • 不可逆算法通常是指哈希函数,如 MD5、SHA-256、bcrypt 等,广泛用于密码存储、签名验证、数据完整性校验等场景。

  • 其核心特性是不可逆、抗碰撞、雪崩效应,适合保证数据不可被还原但可验证的需求。

上次更新: 2025/7/16 17:38:04
聊聊多租户是什么
那些关于管理系统的知识

← 聊聊多租户是什么 那些关于管理系统的知识→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式