网络安全加密算法解密
[TOC]
网络安全加密算法解密
一、加密算法核心分类与本质解析
1. 核心概念
加密算法是通过数学规则实现数据“明文→密文→明文”转换的技术,核心差异在于密钥使用方式和可逆性——单向散列是“不可逆压缩”,对称加密是“同一密钥双向转换”,非对称加密是“公钥私钥配对分工”,三者分别适配“存储验证”“高效传输”“安全密钥交换”三大场景。
2. 三大类算法核心对比
| 算法类型 | 代表算法 | 核心本质 | 优势 | 短板 | 实战核心场景 |
|---|---|---|---|---|---|
| 单向散列加密 | MD5、SHA、MAC | 不可逆数据压缩,输出固定长度摘要 | 性能损耗低、存储占用小,适合验证完整性 | 存在暴力破解/碰撞风险,无逆向解密可能 | 密码存储(如CMS系统)、文件校验 |
| 对称加密 | AES、DES、RC4 | 同一密钥完成加解密,本质是“替换+移位” | 加密速度快、效率高,支持大量数据 | 密钥需双向保管,泄露即全盘失控 | APP/接口数据传输、文件加密 |
| 非对称加密 | RSA、RSA2、PKCS | 公钥(公开)+私钥(保密)配对,分工协作 | 无需传输密钥,安全性高 | 加解密速度慢,仅适配少量数据 | 密钥交换(如HTTPS)、数字签名、登录认证 |
3. 关键理解
- 单向散列的“不可逆”不是绝对的:通过彩虹表、字典碰撞可破解简单明文,“加盐”本质是给明文加“随机前缀/后缀”,让碰撞难度呈指数级提升;
- 对称加密的“对称”是把双刃剑:同一密钥既加密又解密,适合内部系统(如内网APP),但跨网络传输时密钥泄露风险极高;
- 非对称加密的“公私钥分工”:公钥可公开给所有人(用于加密数据/验证签名),私钥必须保密(用于解密数据/生成签名),二者不能混用。
二、密文识别特征与解密条件
1. 核心编码/加密类型识别
| 类型 | 密文核心特征 | 解密必备条件 | 快速判断技巧(个人总结) |
|---|---|---|---|
| MD5(散列) | 0-9+a-f组成,固定16/32位;无特殊字符 | 仅需密文(复杂明文需字典/彩虹表) | 长度固定+纯小写十六进制,无“+/=” |
| Base64(编码) | 大小写字母+数字,尾部常带1-2个“=”;无“+/” | 无需密钥,直接解码(本质是格式转换) | 尾部“=”是标志性特征,明文越长密文越长 |
| AES/DES(对称) | 类似Base64,但含“+/”;长度不固定 | 密文+加密密钥+偏移量(IV)+加密模式(ECB/CBC) | 含“+/”且无固定长度,需结合场景判断 |
| RSA(非对称) | 类似AES,但长度更长(如256/512位);含“+/” | 密文+公钥(加密→解密)或私钥(签名→验证) | 长度明显大于AES,常出现在登录认证、密钥交换场景 |
2. 易混淆点辨析
- Base64是“编码”不是“加密”:仅解决二进制数据传输兼容性,无安全性,解码后直接得明文;
- AES的“模式”不可忽视:ECB模式无需偏移量但安全性低,CBC模式必须要偏移量(IV),否则无法解密;
- RSA密文长度与密钥相关:1024位密钥对应128位密文,2048位对应256位,长度异常可能是多段加密拼接。
三、实战场景:加密算法的实际应用与逆向
1. 场景1:密码存储加密(后端处理)
(1)典型案例
- Discuz!加盐MD5:核心逻辑
password = md5(md5(明文) + salt)(源码路径:/uc_server/model/user.php)- 示例:明文“123456”+盐值“3946d5”→
md5(md5("123456")+"3946d5")→密文“d7192407bb4bfc83d28f374b6812fbcd”
- 示例:明文“123456”+盐值“3946d5”→
- PHP password_hash:采用bcrypt算法(如
$2y$10$KA.7VYVheqod8F3X65tWjO),自带盐值,需用password_verify()验证
(2)攻击思路
- 源码泄露场景:直接查找
md5()“salt”关键字,提取盐值,用字典碰撞(参考文档PHP脚本,替换字典文件为rockyou.txt); - 无源码场景:先判断是纯MD5还是加盐MD5(纯MD5直接用彩虹表查询,加盐则需通过SQL注入/文件读取获取盐值);
- 工具实操:Hashcat破解加盐MD5命令
hashcat -m 20 md5_salt.txt rockyou.txt(-m 20对应“MD5(MD5(明文)+盐值)”)。
2. 场景2:数据通讯加密(前端处理)
(1)典型案例
- ZBlog纯MD5加密:登录页加载
md5.js,密码明文通过MD5(strPassWord)加密后提交; - 混合加密(RSA):登录时用
JSEncrypt()加载公钥,对用户名/密码加密后传输,服务器用私钥解密。
(2)攻击思路
- 轻量加密逆向:F12打开开发者工具,搜索“MD5”“encrypt”关键字,找到加密函数,直接调用函数生成加密后的payload;
- RSA公钥获取:前端JS代码中常嵌入公钥(如
var publicKey = "MIGfMA0G..."),提取后用在线工具(http://tool.chacuo.net/cryptdes)加密payload; - 核心理解:前端加密的本质是“明文不裸传”,但密钥/加密逻辑必然藏在JS中,逆向即可获取,无法真正防渗透(防君子不防小人)。
四、密文识别与解密实战工具集
1. 在线工具
- 综合解密:http://tool.chacuo.net/cryptdes(支持AES/DES/RSA/Base64)
- MD5彩虹表:https://www.cmd5.com/(简单明文秒解,复杂明文需付费)
- 加密特征查询:30余种加密编码特征分析(https://mp.weixin.qq.com/s?__biz=MzAwNDcxMjI2MA==)
2. 本地工具
- Hashcat:字典碰撞神器,支持所有散列/对称加密(命令示例:
hashcat -m 0 md5.txt rockyou.txt破解纯MD5); - Burp Suite:内置解码器(Decode标签)识别Base64/MD5,Repeater模块直接调用前端JS加密逻辑;
- IDA Pro/JD-GUI:无源码时逆向APP/DLL/JAR,提取AES密钥、RSA公钥等核心信息。
3. 脚本工具
- 加盐MD5破解脚本:参考文档PHP代码,替换
$final_hash(目标密文)、$salt(盐值)和字典文件路径,直接运行即可; - JS加密逆向脚本:将前端加密函数(如
MD5()、JSEncrypt.encrypt())复制到本地HTML,传入payload生成加密结果。
五、渗透测试核心攻击思路
1. 第一步:密文类型快速识别
- 先看长度:固定16/32位→MD5;长度长且含“+/”→AES/RSA;尾部带“=”→Base64/AES;
- 再看字符:纯0-9+a-f→MD5;含大小写+数字+“+/=”→Base64/AES/RSA;
- 最后结合场景:登录密码→MD5(加盐);接口参数→AES/Base64;密钥交换→RSA。
2. 第二步:根据解密条件选择方案
- 仅获密文:纯MD5→彩虹表/字典碰撞;AES/RSA→无法直接解,需找密钥(前端JS/源码/配置文件);
- 有源码/前端JS:提取盐值、密钥、偏移量,用工具直接加密payload提交测试;
- 无源码无密钥:逆向APP/JS(找加密函数),或通过SQL注入/文件读取获取密钥(如
select salt from users)。
3. 第三步:实战避坑技巧
- 不要盲目破解:复杂明文(如12位随机密码)的MD5/AES,字典碰撞成功率极低,优先找密钥而非硬解;
- 注意加密模式:AES-CBC模式必须有偏移量(IV),否则解密结果乱码,偏移量常藏在前端JS或接口参数中;
- 区分“编码”和“加密”:Base64无需密钥,解码后直接用,别当成AES浪费时间。
