困在栅栏里的恺撒WriteUp(附栅栏密码加密解密脚本)
题目地址:http://www.shiyanbar.com/ctf/1867
这道题目并不难,就是先用栅栏密码解密,然后再用恺撒密码解密就好。
1.

6代表了栅栏密码的栏数(说实话,一开始我也没看出来,后来是抱着试试的心态用6作栏数解密)。
下面是我写的Python脚本:
import argparse,re,math
def cut_string(string,length):
textArr=re.findall('.{'+str(length)+'}',string)
textArr.append(string[len(textArr)*length:])
return textArr
def rail_fence_encryption(group_char_number,string):
str_len=len(string)
TS_list=cut_string(string,group_char_number)#temporary storage
result_str=''
for i in range(group_char_number):
for j in range(len(TS_list)):
try:
result_str=result_str+TS_list[j][i]
except:
pass
return 'Encryption result:'+result_str
def rail_fence_decryption(group_number,string):
group_char_number=int(math.floor(len(string)/group_number))
add_char_number=len(string)%group_number
TS_list1=cut_string(string[:((group_char_number+1)*add_char_number)],group_char_number+1)
TS_list2=cut_string(string[((group_char_number+1)*add_char_number):],group_char_number)
TS_list=TS_list1+TS_list2
result_str=''
for i in range(group_char_number+1):
for j in range(len(TS_list)):
try:
result_str=result_str+TS_list[j][i]
except:
pass
return 'Decryption result:'+result_str
if __name__ == '__main__':
parser=argparse.ArgumentParser()
parser.add_argument("m",choices=['d','e'],help='encipherment/decipherment')
parser.add_argument('g',type=int,help='group_char_number/group_number')
parser.add_argument('s',type=str,help='encrypt/decrypt strings')
args=parser.parse_args()
if args.g>len(args.s):
print 'ERROR:Please enter the correct group_char_number/group_number!'
pass
else:
if args.m=='e':
print rail_fence_encryption(args.g,args.s)
elif args.m=='d':
print rail_fence_decryption(args.g,args.s)
使用示例(解密):python 文件名.py d 6 NlEyQd{seft}

2.
我们将NEQ{etlydsf}这段密文放到https://www.cryptool.org/en/cto-ciphers/caesar网站上去解密,当KEY=15时,结果出来了:

提交答案时要将{}里的大写字母转换成小写字母,通过。

困在栅栏里的恺撒WriteUp(附栅栏密码加密解密脚本)的更多相关文章
- 围在栅栏中的爱WriteUp(附QWE密码加解密脚本)
题目的链接:http://www.shiyanbar.com/ctf/1917 1.首先题目给出的是摩尔斯电码: 在下面的网站上解密:https://www.cryptool.org/en/cto-c ...
- CTF---密码学入门第四题 困在栅栏里的凯撒
困在栅栏里的凯撒分值:10 来源: 北邮天枢战队 难度:易 参与人数:4531人 Get Flag:2124人 答题人数:2285人 解题通过率:93% 小白发现了一段很6的字符:NlEyQd{sef ...
- 实验吧-密码学-Decode、困在栅栏里的凯撒
Decode 这是一个多重加密. 0x253464253534253435253335253433253661253435253737253464253531253666253738253464253 ...
- 凯撒密码加密解密--JAVA实现(基础)
凯撒密码一种代换密码,据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码.凯撒密码的基本思想是:通过把字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前) ...
- 实验吧—密码学——WP之 困在栅栏里的凯撒
首先我们研究题目.栅栏:凯撒 还发现一个数字“6”,那么我们很容易就有一个解题思路 对这段字符进行栅栏解密再进行凯撒解密 我们都知道,栅栏解密的关键就是栏数,根据题目中我们发现的信息,这段字符串是12 ...
- 1009: 恺撒Caesar密码
1009: 恺撒Caesar密码 时间限制: 10 Sec 内存限制: 128 MB提交: 349 解决: 215[提交][状态][讨论版] 题目描述 Julius Caesar 生活在充满危险和 ...
- PythonChallenge 1:恺撒密码的解码
题目: 解题思路:根据图中的K→M,O→Q,E→G,我们可以发现K,O,E这三个字母都向后移动了2位.据说恺撒率先使用了这一加密方法,因此将其命名为恺撒密码.它的基本思想是:通过把字母移动一定的位数来 ...
- 恺撒密码 I Python实现
'''恺撒密码 I描述凯撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:原文:A ...
- 恺撒密码 I
恺撒密码 I ...
随机推荐
- [DUBBO] Unexpected error occur at send statistic, cause: Forbid consumer 192.168.3.151 access servic
[DUBBO] Unexpected error occur at send statistic, cause: Forbid consumer 192.168.3.151 access servic ...
- Java Web之验证码
今天来模拟一下验证码,我们需要三个文件,两个Servlet,一个jsp 直接贴代码吧 RandomCodeServlet:主要负责生产验证码 package com.vae.RandomCode; i ...
- 设计模式---接口隔离模式之适配器模式(Adapter)
一:概念 通过Adapter模式可以改变已有类(或外部类)的接口形式 二:动机 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不 ...
- Hadoop记录-Hadoop集群添加节点和删除节点
1.添加节点 A:新节点中添加账户,设置无密码登陆 B:Name节点中设置到新节点的无密码登陆 C:在Name节点slaves文件中添加新节点 D:在所有节点/etc/hosts文件中增加新节点(所有 ...
- 【leetcode-51,52】 N皇后,N皇后 II
N皇后(hard) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题 ...
- bzoj千题计划316:bzoj3173: [Tjoi2013]最长上升子序列(二分+树状数组)
https://www.lydsy.com/JudgeOnline/problem.php?id=3173 插入的数是以递增的顺序插入的 这说明如果倒过来考虑,那么从最后一个插入的开始删除,不会对以某 ...
- Docker-01 无人值守升级 CentOS 6.x 系统内核到 3.10.x 长期支持版
#!/bin/bash # # 无人值守升级 CentOS .x 系统内核到 3.10.x 长期支持版 # # # .检查操作系统是否为 CentOS .x # cat /etc/centos-rel ...
- Retrofit提交Json
1.APIService为自定义接口类, 定义@Headers @Headers({"Content-Type: application/json","Accept: a ...
- SpringBoot入门笔记(一)、HelloWorld
本文是一篇SprintBoot学习入门笔记 1.打开Eclipse,版本为Oxygen 4.7.0 2.新建项目NewProject->MavenProject->Next->Nex ...
- intptr_t 指针
对于64为系统: typedef signed char int8_t; typedef short int int16_t; typedef int int32_t; # if __WORDSI ...