python之凯撒加密和切片的实际运用

前言

今天进行了天梯赛,其中有两个有关CTF的题,本人比较感兴趣(只做ctf)对于这两个”CTF题”个人感觉python用切片解比较快,索性用python给大家解一下.

图片[1],python之凯撒加密和切片的实际运用,编程网络技术爱好者中心-神域博客网
图片[2],python之凯撒加密和切片的实际运用,编程网络技术爱好者中心-神域博客网

题解

Problem 1-5. 凯撒密码


题目:

凯撒密码(英语:Caesar cipher),是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加
密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例
如,当偏移量是 3 的时候,所有的字母 A 将被替换成 D,B 变成 E,以此类推。这个加密方法是以罗马共
和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。
凯撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移
动一个固定数目的位置。例如,当偏移量是左移 3 的时候(解密时的密钥就是 3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表
中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
简单来说,当偏移量为 时,则将原文中的每一个字母用其后的第 个字母来替代,字母 Z 后面的
字母为 A,以此循环。
如果明文内包含空格,则暗文相应位置也为空格,不做改动。
Input
本题为多实例,先输入一行一个正整数 (1 ≤ T ≤ 100),表示查询的个数。
对于每次查询,先输入一行两个整数 n, k (1 ≤ n ≤ 105, − 1000 ≤ k ≤ 1000),分别表示字符串的
长度和凯撒密码的偏移量。
然后输入一个长度为 的字符串 s,表示需要加密的明文,明文中只包含大写字母及空格,且行首
行末不包含空格。
保证所有样例中 的和不超过 105。
Output
输出 行,每行一个字符串 t,表示加密后的暗文。
第 6 页,共 25 页郑州轻工业大学 2023 级程序设计天梯赛
Zhengzhou University of Light Industry, December 21st, 2023
Example
standard 输入
1
43 3
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
standard 输出
WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ

图片[3],python之凯撒加密和切片的实际运用,编程网络技术爱好者中心-神域博客网
图片[4],python之凯撒加密和切片的实际运用,编程网络技术爱好者中心-神域博客网
图片[5],python之凯撒加密和切片的实际运用,编程网络技术爱好者中心-神域博客网

代码:

b = int(input())
for _ in range(b):
    u = input().split()
    m = u[0]
    d = int(u[1])
    a = input()
    result = ""
    for char in a:
        if char.isupper(): #判断大小写
            result += chr((ord(char) - ord('A') + d) % 26 + ord('A')) #ACM OJ 1164就是这个解法
        else:
            result += char
    print(result)
图片[6],python之凯撒加密和切片的实际运用,编程网络技术爱好者中心-神域博客网
Problem 1-7. CTF

题目


夺旗(英语:Capture the flag,简称 CTF)在计算机安全中是一种活动,当中会将“旗子”秘密地
埋藏于有目的的易受攻击的程序或网站。参赛者从其他参赛者或主办方偷去旗子。
非常崇拜探姬的小学妹最近迷上了 CTF,学长给了她一个压缩包,让她找到其中的 flag 并提交。
她今天终于破解了压缩包的密码,但解压后她却发现,里面竟然有足足 100 个 txt 文件!她使用
Ctrl+F 大法搜索过后,发现了这些 txt 文件里面有着相同的规律:
每个 txt 文件中都藏着一个 flag,这些 flag 都有固定的格式,即 flag + 一个两位十进制数 + 真正
的 flag 内容,其中这个两位十进制数代表 真正的 flag 内容 的长度。
例如,在 flag03ctf 中,flag 后的两位十进制数 03 表示 真正的 flag 内容 的长度为 3 个字符,
此时 真正的 flag 内容 就是 ctf,所以你需要提交 flag{ctf}。
小学妹苦于自己能力不足,于是她拜托你帮她找出文件中的 flag,你能邦邦她吗?
Input
先输入一行一个正整数 n (1 ≤ n ≤ 105),表示接下来字符串的长度。
然后输入一个长度为 n 的字符串 s,表示某个 txt 文件中的文本内容。
不保证给定的字符串 s 中只包含一个 flag 串,但你只需要输出你找到的第一个 flag 即可。
保证字符串 s 中不含空格,且第一个 flag 一定合法。
Output
输出一行一个字符串 t,表示破译出来的 flag,格式为 flag{真正的 flag 内容}(如样例所示)

图片[7],python之凯撒加密和切片的实际运用,编程网络技术爱好者中心-神域博客网
图片[8],python之凯撒加密和切片的实际运用,编程网络技术爱好者中心-神域博客网

代码:

a = int(input())
b = input()[:a]

for x in range(len(b) - 1):
    while b[x]=='f'and b[x+1]=='l' and b[x+2]=='a'and b[x+3]=='g'and '0'<= b[x+4] <='9' and '0'<=b[x+5]<='9':
        h = 10*int(b[x + 4])+int(b[x + 5])
        print("flag{%s}" % b[x + 6:x + h + 6])
        break
图片[9],python之凯撒加密和切片的实际运用,编程网络技术爱好者中心-神域博客网

结尾

1.1 php直接输出和python(单引号内扩双引号输出)都能过

------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞12 分享
评论 共1条
头像
善语结善缘,恶语伤人心
提交
头像

昵称

取消
昵称常用语 夸夸
夸夸
还有吗!没看够!
表情图片