Crypto入门 (五)混合编码
前言:
这次得题目从本质上说没有什么难点,是多次利用base64和16进制编码,层层解开就好,通过这题得代码编写能很好得锻炼python代码能力,一起加油,尝试着自己写写看看把。
混合编码:
题目:JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzk7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM2ODsmIzY5OyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjNTI7JiM3NjsmIzEyMjsmIzEwNzsmIzUzOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc3OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiMxMDc7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzg7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjODQ7JiM2OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzUwOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc4OyYjMTA1OyYjNTY7JiM1MzsmIzc4OyYjMTIxOyYjNTY7JiM1MzsmIzc5OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM5OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjNjk7JiMxMTk7JiM3NzsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjNjU7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM2OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjMTA3OyYjNTM7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM4NDsmIzEwNzsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzEyMDsmIzc2OyYjMTIyOyYjNjk7JiMxMjA7JiM3ODsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjMTAzOyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjMTE5Ow==
分析: 下载题目后发现,结尾出有等号而且两个,不由的想到Base64,这个编码方式我们前面已经提到过了就不多说了
先写个代码,解解码,python代码如下:
import base64 with open(r'F:\桌面\tmp\1.txt','r') as f:
data = f.read() def base64decode(data):
data = bytes(data, encoding="utf8")
data = base64.b64decode(data)
return data print(base64decode(data))
运行结果如下:
1 b'LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw'
很明显发现都是$#开头,网上百度一番 https://www.jianshu.com/p/6dcefb2a59b2 ,这篇文章说了 以「&#」开头的后接十进制数字,所以先变成16进制然后解码,思路有了,开始写代码
1 import base64
2
3 with open(r'F:\桌面\tmp\1.txt','r') as f:
4 data = f.read()
5
6 def base64decode(data):
7 data = bytes(data, encoding="utf8")
8 data = base64.b64decode(data)
9 return data
10
11 data= base64decode(data)
12 data = bytes.decode(data)
13
14
15
16 def base16decode(data):
17 m = ''
18 pattern = re.compile('[0-9]{2,3}')
19 result = pattern.findall(data)
20
21 for i in result:
22 m += chr(int(i))
23 return m
24
25 data = base16decode(data)
26 print(data)
然后我们来看下结果:
1 LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw
嗯哼,有点像Base64,先测试下,长度能不能被8整除,如果可以那很大概率是Base64啦,给代码
1 str = 'LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw'
2
3 if len(str) % 8 == 0:
4 print(len(str))
5 print('可以被8整除')
结果是可以被8整除,故我们再用base64解码一下试试,代码后面一起给出,先贴出解码后的结果:
b'/119/101/108/99/111/109/101/116/111/97/116/116/97/99/107/97/110/100/100/101/102/101/110/99/101/119/111/114/108/100'
感觉被套娃了,没办法,再base16解码,给出全部的代码:
1 import base64
2
3 with open(r'F:\桌面\tmp\1.txt','r') as f:
4 data = f.read()
5
6 print(data)
7 def base64decode(data):
8 data = bytes(data, encoding="utf8")
9 data = base64.b64decode(data)
10 return data
11
12 data= base64decode(data)
13 data = bytes.decode(data)
14 print(data)
15
16
17 def base16decode(data):
18 m = ''
19 pattern = re.compile('[0-9]{2,3}')
20 result = pattern.findall(data)
21
22 for i in result:
23 m += chr(int(i))
24 return m
25
26 data = base16decode(data)
27 print(data)
28
29 data = base64decode(data)
30 print(data)
31
32 def base16decode1(data):
33 m = ''
34 data = bytes.decode(data)
35 pattern = re.compile('[0-9]{3}')
36 result = pattern.findall(data)
37
38 for i in result:
39 m += chr(int(i))
40 return m
41 print(base16decode1(data))
给出结果:
1 welometottknddefeneworld
哈哈,还是被解出来了,根据解出的步骤反推加密步骤为,先转成16进制,然后再base64编码 ,再转成16 进制,再base64编码,套娃!!!!
除了这种常规思路,我们也可以参考之前那个链接后面提到的方法直接用浏览器解析
参考链接:
https://www.jianshu.com/p/6dcefb2a59b2
https://www.cnblogs.com/yuanchu/p/13467058.html
Crypto入门 (五)混合编码的更多相关文章
- openresty 前端开发入门五之Mysql篇
openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...
- Thinkphp入门 五 —模型 (49)
原文:Thinkphp入门 五 -模型 (49) [数据库操作model模型] model 模型 数据库操作 tp框架主要设计模式:MVC C:controller 控制器 shop/Li ...
- DevExpress XtraReports 入门五 创建交叉表报表
原文:DevExpress XtraReports 入门五 创建交叉表报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这样浪 ...
- 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?
本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言 老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...
- C#基础入门 五
C#基础入门 五 递归 递归调用:一个方法直接或间接地调用了它本身,就称为方法的递归调用. 递归方法:在方法体内调用该方法本身. 递归示例 public long Fib(int n) { if(n= ...
- Python爬虫入门五之URLError异常处理
大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...
- Python爬虫教程——入门五之URLError异常处理
大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...
- 转 Python爬虫入门五之URLError异常处理
静觅 » Python爬虫入门五之URLError异常处理 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中, ...
- Jmeter Web 性能测试入门 (五):Jmeter 参数化 Request
用来参数化的常用方法: 添加配置元件:用户定义的变量 使用函数助手 添加配置元件:CSV Data Set Config 添加前置处理器:BeanShell PreProcessor 添加配置元件:用 ...
- MySql概述及入门(五)
MySql概述及入门(五) MySQL集群搭建之读写分离 读写分离的理解 为解决单数据库节点在高并发.高压力情况下出现的性能瓶颈问题,读写分离的特性包括会话不开启事务,读语句直接发送到 salve 执 ...
随机推荐
- firefox用于web安全测试的插件[转]
备份用 目录[-] firebug 油猴子Greasemonkey JavaScript Debugger flagfox tamper data live http headers modify h ...
- 快速搭建maven私服仓库并配置
1.第一步,通过官方网站下载tar.gz包上传到服务器并解压 随后进入解压目录,并执行./bin/nexus start 此时可能会出现如下异常 处理这个问题很容易,找到bin下的nexus文件,vi ...
- Visual Studio NuGet的地址(记录)
NuGet源地址 : https://nuget.org/api/v2/ https://api.nuget.org/v3/index.json (推荐)
- 【剑指Offer】【栈】包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). A:因为包含了入栈和出栈的操作,存储最小数的变量不能单单只是一个int的变量,应该用一个辅 ...
- VMWare 12 Mac 10.11 XCode 7.3 Ipad真机调试重要问题总结
XCode 7.3可以不需要每年缴费而直接调试IOS应用,测试如下: 1,安装Mac 10.11在VMWare12上,网上有很多例子.注意: 1.1,虚拟机设置中USB为USB2.0,不能是3.0或其 ...
- vue界面显示无效的token
返回登陆界面,重新登陆 登陆成功
- Rancher v2.4.8 容器管理平台-集群搭建(基于k8s)
整体概要 1.准备VMware+Ubuntu(ubuntu-20.04-live-server-amd64.iso)三台,一主两从(master,node1,node2) 2.在三台服务器上安装 do ...
- flask-基础篇01
一.介绍 flask只有一个内核,其WSGI工具箱采用Werkzeug(路由模块),模板引擎使用Jinja2.其他几乎所有功能都要用第三方扩展来实现. 二.常用扩展包 扩展列表:http://flas ...
- mysql-8.0.28-winx64数据库win10系统安装步骤
一.官网下载安装包 下载地址:https://dev.mysql.com/downloads/mysql/ ↓↓↓选择如下图版本↓↓↓ 二.解压安装包到本地 三.新建记事本创建my.ini配置文件 四 ...
- pg的json类型
以下举例说明: postgres=# select '{"b":1,"a":2}'::json; json --------------- {"b&q ...