小迪安全第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系统加密逻辑进行实战练习。

相关推荐
m0_738120722 小时前
渗透测试——Ripper靶机详细横向渗透过程(rips扫描文件,水平横向越权,Webmin直接获取root权限)
linux·网络·数据库·安全·web安全·php
QCzblack2 小时前
知识点回顾
安全
ShineWinsu2 小时前
MySQL安全加固十大硬核操作:硬核防护指南
数据库·mysql·安全
indexsunny10 小时前
互联网大厂Java求职面试实战:微服务与Spring生态全攻略
java·数据库·spring boot·安全·微服务·面试·消息队列
jixinghuifu12 小时前
理性权衡:手机系统更新,别盲目也别抗拒
人工智能·安全·智能手机
guoji778813 小时前
安全与对齐的深层博弈:Gemini 3.1 Pro 安全护栏与对抗测试深度拆解
人工智能·安全
亚历克斯神14 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
雷帝木木14 小时前
Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私-适配鸿蒙 HarmonyOS ohos
安全·flutter·harmonyos
云祺vinchin14 小时前
解读“十五五”热词,容灾备份正成为国家安全基石
安全·网络安全·数据安全·十五五·容灾备份体系