小迪安全第9天:算法逆向与加密解密基础

一、加密算法分类与核心特征

1.1 三大加密类型对比

表格

类型 代表算法 核心特点 解密条件 成功率
单向散列加密 MD5、SHA、MAC、CRC 不可逆、固定输出、碰撞破解 只需密文 依赖明文复杂度
对称加密 AES、DES、3DES 加解密用同一密钥、速度快 密文+密钥+模式+偏移量 99.9%
非对称加密 RSA、SSL、PKCS 公钥/私钥配对、安全性高 密文+公钥或私钥(配对即可) 100%

1.2 单向散列加密详解(MD5/SHA)

核心原理:

  • 碰撞机制:固定明文→固定密文,通过预计算字典反向查询

  • 无额外参数:仅需明文和密文,无需密钥/偏移量

  • 加盐防御MD5(MD5(明文)+盐值) 增加破解难度

MD5识别特征:

  • 固定长度:16位或32位

  • 字符范围 :仅 0-9a-f(十六进制)

  • 不可逆:无解密函数,只能碰撞

实战案例:PHP MD5加盐加密

php

复制

复制代码
// 源码逻辑:两次MD5+盐值
$hash = MD5(MD5($password) . $salt);

// 逆向脚本思路(碰撞法)
$password = "123456";  // 尝试值
$a = MD5($password);
$aa = $a . $salt;      // 连接盐值
$aaa = MD5($aa);       // 二次加密
if($aaa == $target_hash) { echo "OK"; }

1.3 对称加密详解(AES/DES)

必备解密四要素:

  1. 密文(Base64或Hex格式)

  2. 密钥(Key) ------ 最关键

  3. 加密模式(ECB/CBC/CFB/OFB/CTR)

  4. 偏移量(IV) ------ CBC等模式必需

AES vs DES 特征识别:

  • 密文含 +/ 符号 → 大概率是AES/DES(Base64编码后)

  • 明文越长密文越长(与MD5固定长度区别)

  • 尾部常有 = 填充

AES加密示例流程:

plain

复制

复制代码
明文"小迪SEC" 
→ 密钥"123456" 
→ 模式"AES-128-ECB" 
→ Base64编码 
→ 密文输出

解密工具使用要点:

  • 模式错误 → 解密失败

  • 密钥错误 → 绝对失败

  • 偏移量错误(CBC模式)→ 解密失败


1.4 非对称加密详解(RSA)

核心机制:

  • 密钥对:公钥(Public Key)+ 私钥(Private Key)

  • 配对规则:公钥加密→私钥解密;私钥加密→公钥解密

  • 特征:密文长度固定、每次加密结果不同

解密条件(满足其一即可):

  • 密文 + 公钥(对方用私钥加密时)

  • 密文 + 私钥(对方用公钥加密时)

  • 最佳实践:同时获取公钥和私钥,双向验证


二、密文识别与解密方法论

2.1 密文特征速查表

表格

算法 长度特征 字符特征 尾部特征 可逆性
MD5 16/32位固定 0-9,a-f ❌ 不可逆
SHA1 40位固定 0-9,a-f ❌ 不可逆
Base64 随明文变化 A-Z,a-z,0-9,+,/ === ✅ 直接解码
AES/DES 随明文变化 +/ 可能有= ✅ 需密钥
RSA 固定长度 长串随机字符 无规律 ✅ 需密钥对

2.2 标准解密流程(重点)

plain

复制

复制代码
┌─────────────────────────────────────────┐
│  Step 1: 观察密文特征,初步判断算法类型      │
│     ↓ 能识别?                           │
│  ┌─────────┐    否    ┌─────────────────┐ │
│  │ 直接解密 │ ←────── │ Step 2: 获取源码  │ │
│  └─────────┘         │  ├─ 后端加密→找源码 │ │
│                      │  └─ 前端加密→抓包找JS│ │
└─────────────────────────────────────────┘

关键决策点:

表格

场景 操作路径 成功率
MD5/SHA CMD5、SOMD5等在线平台碰撞 依赖密码复杂度
Base64 直接解码工具 100%
AES/DES/RSA 必须获取密钥 → 源码/前端JS/配置文件 有密钥则100%
未知算法 源码分析 → 定位加密函数 → 提取逻辑 依赖源码获取

三、实战:源码级加密分析

3.1 后端加密(PHP示例)

场景:获取数据库密码密文,需还原明文

分析步骤:

  1. 定位加密文件user.phpadduser 函数

  2. 提取加密逻辑

    php

    复制

    复制代码
    // 发现加盐MD5
    MD5(MD5($password) . $salt)
  3. 构建碰撞脚本:按相同逻辑遍历字典

PHP内置哈希识别:

  • password_hash() 函数 → 使用 password_verify() 验证

  • 特征:以 $2y$ 开头(bcrypt算法)

  • 注意:CMD5等平台无法破解,需自建脚本碰撞


3.2 前端加密(JavaScript逆向)

核心优势:前端代码完全可见,无需服务器权限

分析流程:

  1. 抓包定位:登录请求 → 观察密码字段变化

  2. 查找JS引用 :搜索 md5.jsaes.js 等加密库

  3. 跟踪加密逻辑

    JavaScript

    复制

    复制代码
    // 典型前端加密
    var pwd = document.getElementById('password').value;
    var encrypted = MD5(pwd);  // 调用自定义MD5函数
  4. 提取算法参数:密钥、模式、偏移量通常硬编码在JS中

关键工具:

  • 浏览器开发者工具 → Network面板 → JS文件分析

  • Burp Suite → 拦截对比明文/密文


四、靶场实战:加密算法与SQL注入

4.1 场景描述

  • 目标URL参数加密传输

  • 直接注入失败,需适配加密逻辑

  • 前提 :获取源码得知为 AES-128-CBC + 双重Base64

4.2 攻击流程

plain

复制

复制代码
1. 获取源码 → 提取密钥和偏移量
2. 编写注入语句:' UNION SELECT ...
3. 按目标逻辑加密:
   明文 → AES加密 → Base64编码 → Base64再编码
4. 替换URL参数值发送
5. 目标服务器解密后正常执行SQL

核心要点:

  • 注入Payload必须按对方解密逻辑构造

  • 直接发送明文Payload → 对方解密乱码 → 注入失败

  • 加密次数、编码顺序必须与源码完全一致


五、本章核心考点总结(SRC/CTF/面试)

5.1 必背知识点

表格

考点 关键答案
MD5特征 32位/16位,十六进制字符(0-9,a-f),不可逆
对称加密必备条件 密文+密钥+模式+偏移量(密钥最重要)
RSA解密条件 密文+公钥/私钥(配对即可),双钥最佳
Base64与AES区别 Base64无+/,AES的Base64编码含+/
前端加密优势 代码可见,通过JS文件直接提取算法
后端加密难点 必须获取源码,无法直接猜测

5.2 CTF常见题型

  1. 密文识别题:给定字符串判断加密类型

  2. 密钥提取题:从JS/源码中找到隐藏密钥

  3. 算法逆向题:根据加密逻辑编写解密脚本

  4. 加密注入题:构造加密Payload完成SQL注入

5.3 面试高频问题

Q1:拿到一个32位十六进制字符串,如何解密?

判断为MD5,使用在线平台碰撞;若失败,寻找源码确认是否加盐,构建自定义碰撞脚本。

Q2:AES加密数据如何解密?

必须获取密钥、加密模式、偏移量。优先查看前端JS或后端源码,提取硬编码密钥。

Q3:RSA公钥加密的数据,只有公钥能解吗?

不能。公钥加密需私钥解密,私钥加密需公钥解密。实战中应同时获取公私钥配对验证。

Q4:如何快速判断加密位置在前端还是后端?

抓包对比输入密码与传输值:若传输值已加密→前端加密;若明文传输→后端加密。结合浏览器开发者工具查看JS文件确认。


5.4 工具清单

表格

用途 工具/平台
MD5碰撞 CMD5、SOMD5、自建Python脚本
AES/DES加解密 在线工具、CyberChef、OpenSSL
RSA加解密 RSATool、OpenSSL、在线工具
Base64编解码 系统命令base64、Burp Suite
前端JS分析 Chrome DevTools、Burp Suite
源码分析 IDE全局搜索、正则匹配加密函数

学习建议: 算法逆向的核心在于逻辑分析能力源码阅读能力,建议结合CTF Crypto题型与真实Web系统加密逻辑进行实战练习。

相关推荐
amao99885 分钟前
系统安全-身份认证
安全·系统安全
小江的记录本26 分钟前
【系统设计】《2026高频经典系统设计题》(秒杀系统、短链接系统、订单系统、支付系统、IM系统、RAG系统设计)(完整版)
java·后端·python·安全·设计模式·架构·系统架构
小陈工2 小时前
数据库Operator开发实战:以PostgreSQL为例
开发语言·数据库·人工智能·python·安全·postgresql·开源
CDN3603 小时前
【前端进阶】告别“慢”与“不安全”:我是如何用360CDN搞定API加速和HTTPS的
前端·安全·https
北风toto4 小时前
深入解析JWT Token生成原理与安全加密技术详解
算法·安全·哈希算法
Y学院4 小时前
第一章 网络安全认知觉醒:从“事不关己”到“人人有责” 第一节 你以为的安全,都是致命的错觉
安全·web安全
一名优秀的码农4 小时前
vulhub系列-69-Keyring(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
Y学院5 小时前
当数字世界不再安全:2026,我们正站在网络安全的悬崖边
人工智能·安全·web安全
阳光普照世界和平5 小时前
2026软件安全趋势解析:攻防迭代下,企业该如何破局?
网络·安全
恋恋风尘hhh5 小时前
Web 前端安全机制分析:以 Webpack 打包混淆为例
前端·安全·webpack