攻防世界题目练习——Crypto密码新手+引导模式(二)(持续更新)

news2024/11/20 7:02:48

题目目录

    • 1. 转轮机加密
    • 2. easychallenge

上一篇:攻防世界题目练习——Crypto密码新手+引导模式(一)(持续更新)

1. 转轮机加密

首先了解一下轮转机加密吧。
传统密码学(三)——转轮密码机

题目内容如下:

1:  < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2:  < KPBELNACZDTRXMJQOYHGVSFUWI <
3:  < BDMAIZVRNSJUWFHTEQGYXPLOCK <
4:  < RPLNDVHGFCUKTEBSXQYIZMJWAO <
5:  < IHFRLABEUOTSGJVDKCPMNZQWXY <
6:  < AMKGHIWPNYCJBFZDRUSLOQXVET <
7:  < GWTHSPYBXIZULVKMRAFDCEONJQ <
8:  < NOZUTWDCVRJLXKISEFAPMYGHBQ <
9:  < XPLTDSRFHENYVUBMCQWAOIKZGJ <
10: < UDNAJFBOWTGVRSCZQKELMXYIHP <
11< MNBVCXZQWERTPOIUYALSKDJFHG <
12< LVNCMXZPQOWEIURYTASBKJDFHG <
13< JZQAWSXCDERFVBGTYHNUMKILOP <
#可以看出,上面13行应该就是13个轮子了,每行有26个字母
密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
#上面密钥应该就是13个轮子的排列顺序
密文为:NFQKSEVOQOFNP

我们把它重新按照密钥顺序排列一下:

2:  < KPBELNACZDTRXMJQOYHGVSFUWI <
3:  < BDMAIZVRNSJUWFHTEQGYXPLOCK <
7:  < GWTHSPYBXIZULVKMRAFDCEONJQ <
5:  < IHFRLABEUOTSGJVDKCPMNZQWXY <
13< JZQAWSXCDERFVBGTYHNUMKILOP <
12< LVNCMXZPQOWEIURYTASBKJDFHG <
9:  < XPLTDSRFHENYVUBMCQWAOIKZGJ <
1:  < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
8:  < NOZUTWDCVRJLXKISEFAPMYGHBQ <
10: < UDNAJFBOWTGVRSCZQKELMXYIHP <
4:  < RPLNDVHGFCUKTEBSXQYIZMJWAO <
11< MNBVCXZQWERTPOIUYALSKDJFHG <
6:  < AMKGHIWPNYCJBFZDRUSLOQXVET <

根据转轮密码机的定义,应该是第一个轮转一圈,第2个轮就会转一个字母,但是转的不到一圈的话第二个轮子也不会转,这样的周期下来,其实就和普通的密码锁随便转出来的结果是一样的我感觉。
还是有点搞不懂,但别人都是把每个轮的第一个字母转到和密码的排列一样的,然后再看哪一列是有意义的字母组合。
搞不懂,不想搞懂了,就这样记着吧:)。
脚本:

r = [
    "KPBELNACZDTRXMJQOYHGVSFUWI", "BDMAIZVRNSJUWFHTEQGYXPLOCK",
    "GWTHSPYBXIZULVKMRAFDCEONJQ", "IHFRLABEUOTSGJVDKCPMNZQWXY",
    "JZQAWSXCDERFVBGTYHNUMKILOP", "LVNCMXZPQOWEIURYTASBKJDFHG",
    "XPLTDSRFHENYVUBMCQWAOIKZGJ", "ZWAXJGDLUBVIQHKYPNTCRMOSFE",
    "NOZUTWDCVRJLXKISEFAPMYGHBQ", "UDNAJFBOWTGVRSCZQKELMXYIHP",
    "RPLNDVHGFCUKTEBSXQYIZMJWAO", "MNBVCXZQWERTPOIUYALSKDJFHG",
    "AMKGHIWPNYCJBFZDRUSLOQXVET"
]

m = "NFQKSEVOQOFNP"
r2 = []
for i in range(13):
    index = r[i].index(m[i])
    #index()返回某个字符或字符串在所属字符串中第一次出现的位置
    r[i] = r[i][index:] + r[i][:index]
#print(r)
for i in range(26):
    s = ""
    for j in range(13):
        s += r[j][i]
    print(s.lower() + "\n")
    #s.lower()将所有的大写字母转成小写字母
#输出结果:
#nfqksevoqofnp
#ahgcxiusnwcbn
#ctwpcubfotuvy
#zetmdrmezgkcc
#dqhneyczuvtxj
#tgszrtqwtrezb
#rypqfawawsbqf
#xxywvsaxdcswz
#mpbxbbojczxed
#jlxygkigvqqrr
#qoiitjkdrkytu
#oczhydzljeips
#ykufhfgullzol
#hblrnhjbxmmio
#gdvlugxvkxjuq
#vmkamlpiiywyx
#sambkvlqsiaav
##fireinthehole##
##唯一一行有意义的字母##
#uzaulcdkfprst
#wvfoomsyaupka
#irdtpxrppdldm
#kncsjzfnmnnjk
#psegzphtyadfg
#bjojqqecgjvhh
#eunvaonrhfhgi
#lwjdwwymbbgmw

2. easychallenge

下载附件拿到了一个pyc文件,总记得之前在哪道题里见过,但是没找着,总之这是一个python类的文件,需要再反编译为py文件,搜到了可以在线网站解密:
python反编译 - 在线工具
这个网站提到,python文件在被import运行的时候会在同目录下编译一个pyc的文件(为了下次快速加载),这个文件可以和py文件一样使用,但无法阅读和修改。所以,再结合题目内容,我们要将它反编译为py文件再进行修改才能获得flag。
反编译后的py文件如下:

#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 2.7

import base64

def encode1(ans):
    s = ''
    for i in ans:
        x = ord(i) ^ 36
        x = x + 25
        s += chr(x)
    
    return s


def encode2(ans):
    s = ''
    for i in ans:
        x = ord(i) + 36
        x = x ^ 36
        s += chr(x)
    
    return s


def encode3(ans):
    return base64.b32encode(ans)

flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:
    print 'correct'
else:
    print 'wrong'

代码里可以看到有3个encode加密函数,这几个加密函数都挺简单的,加密过程也很简单,在原来的代码基础上把过程或者运算操作反过来就好了。
解码脚本:

import base64

def decode1(ans):
    s = ''
    for i in ans:
        x = ord(i) - 25
        x = x ^ 36
        s += chr(x)

    return s

def decode2(ans):
    s = ''
    for i in ans:
        x = i ^ 36
        x = x - 36
        s += chr(x)

    return s

def decode3(ans):
    return base64.b32decode(ans)

flag = ' '
#print 'Please Input your flag:'
#flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
#s1=decode3(final)
#print(s1)
print(decode1(decode2(decode3(final))))
#输出结果:
#cyberpeace{interestinghhhhh}

decode2函数本来第一步按照原来encode2函数的写法应该是x=ord(i)^36,但是这样会报错:
在这里插入图片描述
说是ord() expected string of length 1, but int found。于是我们单独输出decode3之后的结果看看:
在这里插入图片描述
其实我并不理解输出的结果是什么类型,看到 \x 感觉是十六进制,但是又出现了字母Z,报错也说是int类型。
decode2处理的就是decode3之后的内容,既然decode3之后的内容是int类型,我们在decode2处就不需要进行ord()转整型了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通讯录(C语言版)

用c语言实现一个通讯录 功能&#xff1a;.添加、删除、查找、更改、显示、排序联系人 内存存储方式&#xff1a;结构体数组 1.打印菜单&#xff0c;各个功能分别用函数实现&#xff0c;将函数声明放在头文件中。 2.定义联系人信息&#xff0c;将联系人信息与count&#xff…

云渲染是什么?云渲染怎么用?

云渲染的出现为影视动画、建筑设计、游戏开发等领域提供了很大的便利&#xff0c;为公司或者个人节约了大量的渲染部分时间&#xff0c;大大的提高了工作效率。哪什么是云渲染&#xff1f;云渲染怎么用呢&#xff1f;我们一起来看看。 云渲染是什么&#xff1f; 云渲染是一种…

高级深入--day30

Scrapy Shell Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据。 如果安装了 IPython ,Scrapy终端将使用 IPython (替代标准Python终端)。 IPython 终端与其…

QDir实践

现在有多个文件&#xff0c;路径为&#xff1a; a\xxx\kmd_config\c.json 其中xxx是变量 startcalc,,,,,, 目标&#xff1a; 访问每一个json文件 实例&#xff1a; QString app_path QApplication::applicationDirPath() "/app";QDir dir(app_path);QStringLi…

NewStarCTF2023公开赛道-压缩包们

题目提示是压缩包 用010editor打开&#xff0c;不见PK头&#xff0c;补上50 4B 03 04 14 00 00 00 将文件改成.zip后缀&#xff0c;打开&#xff0c;解压出flag.zip 尝试解压&#xff0c;报错 发现一串base64编码 SSBsaWtlIHNpeC1kaWdpdCBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgd…

【LeetCode刷题笔记】二分查找

1539. 第 k 个缺失的正整数 解题思路&#xff1a; 1. 二分 &#xff0c;一个严格升序 正整数 数组在没有数字缺失的情况下满足&#xff1a; nums[i] i 1 &#xff0c;如果有缺失&#xff0c;则每个 下标 i 上的数字前面缺失的正整数个数为&#xff1a; nums[i] - (i 1) &am…

ROS 摄像头标定-camera_calibration

摄像头这种精密仪器对光学器件的要求较高&#xff0c;由于摄像头内部与外部的一些原因&#xff0c;生成的物体图像往往会发生畸变&#xff0c;为了避免数据源造成的误差&#xff0c;需要针对摄像头的参数进行标定。 ROS官方提供了用于双目和单目摄像头标定的功能包—camera_cal…

单链表---结构体实现

定义 链表称为线性表的链式存储&#xff0c;顺序表逻辑上相邻的数据&#xff0c;存储位置也相邻。链表逻辑上相邻的数据&#xff0c;存储位置是随机分布在内存的各个位置上的。 故 对于每一个结点&#xff0c;定义的结构体是&#xff1a; typedef struct _LinkNode {int d…

存档&改造【06】Apex-Fancy-Tree-Select花式树的使用误删页数据还原(根据时间节点导出导入)

之前一直想实现厂区-区域-产线之间的级联选取&#xff0c;于是导入插件Apex-Fancy-Tree-Select花式树 存档&#xff06;改造【03】Apex-Fancy-Tree-Select花式树的导入-CSDN博客 现在则是在Oracle Apex中的应用 花式书级联列表展示厂区-区域-产线 想要实现的效果 由厂区>…

Shopee活动报错怎么办?Shopee活动类型怎么选择?-站斧浏览器

有时候&#xff0c;在同步虾皮活动的过程中&#xff0c;您可能会遇到一些问题或报错信息。遇到这种情况要怎么办&#xff0c;Shopee活动类型怎么选择&#xff1f; Shopee活动报错怎么办&#xff1f; 下面是几种常见的问题及其解决方法&#xff1a; 1、网络连接问题&#xff…

05 | @Query 解决了什么问题?什么时候应该选择它?

上个课时我们介绍了 Query Define Method 的语法&#xff0c;这一课时来介绍一下 Query 注解的语法是什么样的。我们通过快速体验 Query 的方法、JpaQueryLookupStrategy 关键源码剖析、Query 的基本用法、Query 之 Projections 应用返回指定 DTO、Query 动态查询解决方法&…

网工笔记整理:策略工具Filter-policy的使用

一、概述 Filter-Policy&#xff08;过滤-策略&#xff09;是一个很常用的路由信息过滤工具&#xff0c;能够对接收、发布、引入的路由进行过滤&#xff0c;可应用于IS-IS、OSPF、BGP等协议。 Filter-policy在距离矢量路由协议中的应用 filter-policy import&#xff1a;不发…

Python学习基础笔记六十五——布尔值

布尔对象&#xff1a; Python中有一种对象类型称之为布尔对象&#xff08;英文叫bool&#xff09;。 布尔对象只有两种取值&#xff0c;True和False。对应的是真和假&#xff0c;或者说是和否。True对应的是&#xff0c;False对应的是否。 我觉得这句话是一个关键&#xff1a…

04 | 如何利用 Repository 中的方法返回值解决实际问题?

上一课时&#xff0c;我们着重讲了方法名和参数的使用方法&#xff0c;这一课时我们来看下Repository 支持的返回结果有哪些&#xff0c;以及 DTO 类型的返回结果如何自定义&#xff0c;及其在实际工作场景中我们如何做。通过本课时的学习&#xff0c;你将了解到 Repository 的…

Ansible概述以及模块

目录 一、Ansible概述 1、Ansible是什么 2、Ansible的作用 3、Ansible的特性 4、Ansible的工作机制 5、Ansible的特点 二、Ansible安装部署 1、管理端安装ansible 2、配置主机清单 3、配置密钥对验证 三、Absible命令行模块 1、command模块 2、shell模块 3、cron …

Jackson+Feign反序列化问题排查

概述 本文记录在使用Spring Cloud微服务开发时遇到的一个反序列化问题&#xff0c;RPC/HTTP框架使用的是Feign&#xff0c;JSON序列化反序列化工具是Jackson。 问题 测试环境的ELK告警日志如下&#xff1a; - [43f42bf7] 500 Server Error for HTTP POST "/api/open/d…

一篇文章让你了解“JWT“

一.JWT简介 1.概念 JWT (JSON Web Token) 是一种用于在网络上安全传输信息的开放标准&#xff08;RFC 7519&#xff09;。它是一种紧凑且自包含的方式&#xff0c;用于在不同组件之间传递信息&#xff0c;通常用于身份验证和授权目的。JWT 是以 JSON 格式编码的令牌&#xff…

Shell后门脚本

说明&#xff1a;请在云服务器中执行&#xff0c;执行脚本后会发生 1、创建${create_user}用户并赋予sudo权限2、获取公网IP地址和SSH端口3、将用户公网IPSSH端口信息发送给${mail_from}变量 #!/bin/bash # 收件人邮箱 mail_fromxxxxx.com sshd_port$(grep "^Port"…

AI低代码维格云甘特视图怎么用?

甘特视图,以日期为横轴展示任务持续时长和先后顺序,简称甘特图。 项目管理过程中,合理分配任务和资源至关重要,使用甘特图,妥当解决以下场景: 想知道整个项目的周期多长,哪些任务对项目的周期影响最大; 想知道每个任务的时间有多长,任务的优先级和依赖关系是什么; 想…

VUE3页面截取部署后的二级目录地址

用vue3开发了一个项目&#xff0c;只能部署在根目录&#xff0c;不能加二级目录&#xff0c;后来网上找了解决方案&#xff0c;在vite.config.ts中增加base: ./,配置解决问题&#xff0c;参考下图&#xff1a; 但部署后要获取部署的二级目录地址切遇到问题&#xff0c;后来想了…