NSSCTF刷题wp——单表替换密码

NSSCTF Crypto 模块

单表替换密码

[HGAME 2022 week1]Matryoshka ID:1855

打开Matryoshka.txt,发现是一堆点,看标签可能是Braille盲文,仔细比对后发现重点不是将盲文翻译成英语,而是后面得标签莫斯密码,可以发现⠌非常像平时解莫斯密码的分隔符,⠨和⠤就很可能对应着摩斯密码里面的长,短码

在线摩斯密码工具

请添加图片描述
请添加图片描述
结果前面完全不对,后面部分对,考虑到在莫斯密码里面,长短和短长是完全不一样的,反转一手

⠨⠨⠨⠨⠤⠌⠤⠨⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠨⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠨⠨⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠨⠨⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠨⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠨⠨⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠤⠨⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠤⠨⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠨⠨⠨⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠨⠨⠨⠨⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠨⠨⠨⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠤⠤⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠨⠌⠤⠤⠤⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠨⠨⠨⠨⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠤⠨⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠨⠌⠤⠤⠤⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠨⠨⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠤⠤⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠤⠤⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠤⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠨⠨⠨⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠨⠨⠨⠨⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠨⠌⠨⠨⠨⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠨⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠤⠤⠤⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠤⠤⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠨⠨⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠨⠌⠨⠤⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠤⠤⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠨⠨⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠤⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠨⠌⠨⠨⠨⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠨⠤⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠨⠤⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠨⠨⠨⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠤⠤⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠨⠨⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠤⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠨⠨⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠨⠌⠨⠨⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠨⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠨⠤⠌⠤⠨⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠤⠤⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠤⠤⠤⠨⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠨⠨⠨⠨⠌⠨⠨⠤⠨⠌⠤⠤⠨⠨⠤⠤⠌⠤⠤⠨⠨⠨⠌⠨⠨⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠤⠤⠤⠤⠌⠤⠤⠨⠨⠤⠤⠌⠨⠨⠨⠤⠤⠌⠤⠨⠨

再解

46,66,42,75,66,45,46,6E,6D,4C,73,36,44,33,73,69,59,74,4C,36,58,32,70,34,69,4E,30,63,64,53,6C,79,6B,6D,39,72,51,4E,39,6F,4D,53,31,6A,6B,73,39,72,4B,32,52,36,6B,4C,38,68,6F,72,30,3D

去掉逗号(附上代码)

str='46,66,42,75,66,45,46,6E,6D,4C,73,36,44,33,73,69,59,74,4C,36,58,32,70,34,69,4E,30,63,64,53,6C,79,6B,6D,39,72,51,4E,39,6F,4D,53,31,6A,6B,73,39,72,4B,32,52,36,6B,4C,38,68,6F,72,30,3D'
for i in str:
    str =str.replace(',','')
print(str)

466642756645466E6D4C73364433736959744C3658327034694E306364536C796B6D3972514E396F4D53316A6B7339724B3252366B4C38686F72303D

观察到字母大小不超过F,考虑是否为16进制,hex转str

FfBufEFnmLs6D3siYtL6X2p4iN0cdSlykm9rQN9oMS1jks9rK2R6kL8hor0=

再用base解码失败
请添加图片描述
再回看txtCaesar:21; Vigenère:hgame

因为凯撒密码会位移字符,base终止符=会被移动,所以尝试维吉尼亚密码,再base

发现是base64
c0bmvghyz_{0Raz_gxxm0thkzo_0ob0m_vokcczt_!r}

再凯撒21位
h0gralmde_{0Wfe_lccr0ympet_0tg0r_atphhey_!w}

发现不对,再看标签栅栏,再解
请添加图片描述

hgame{Welc0me_t0_the_w0rld_0f_crypt0graphy!}

[UTCTF 2020]basics ID:201

打开txt全是01并且每隔8个字符就被分割,直接二进制转ASCII码(ps:我先转成了10进制)
请添加图片描述
读文本大概意思是说恭喜你过关,成功下一关,并且给出下一关的提示:那种code是A-Z,a-z,0-9,有时加上/和+,,这不就是base64嘛,直接解
请添加图片描述
再读下一关的提示什么Roman people,我们凯撒大帝老罗马人了,再凯撒解码(我的这里用的位移密码,所以偏移量是凯撒的26-n,意思是一样的)
请添加图片描述
再看提示: 提示:我们知道标志将采用 utflag{…} 格式 - 这意味着如果您看到该模式,您就会知道 u、t、f、la 和 g 的对应关系是什么。直接quip quip

congratulations! you have finished the beginner cryptography challenge. here is a flag for all your hard efforts: utflag{n0w_th4ts_wh4t_i_c4ll_crypt0}. you will find that a lot of cryptography is just building off this sort of basic knowledge, and it really is not so bad after all. hope you enjoyed the challenge!

什么恭喜你,什么什么巴拉巴拉的,直接跳过得flagutflag{n0w_th4ts_wh4t_i_c4ll_crypt0}

ps:最后一句话:你会发现很多密码学只是建立在这种基础知识的基础上,毕竟它真的没有那么糟糕。 希望你喜欢挑战!

[AFCTF 2018]Single ID:936

打开txt读函数

#include <bits/stdc++.h>
using namespace std;
int main()
{
	freopen("Plain.txt","r",stdin);
	freopen("Cipher.txt","w",stdout);
	map<char, char> f;
	int arr[26];
	for(int i=0;i<26;++i){
		arr[i]=i;
	}
	random_shuffle(arr,arr+26);
	for(int i=0;i<26;++i){
		f['a'+i]='a'+arr[i];
		f['A'+i]='A'+arr[i];
	}
	char ch;
	while((ch=getchar())!=EOF){
		if(f.count(ch)){
			putchar(f[ch]);
		}else{
			putchar(ch);
		}
	}
	return 0;
}

其中random_shuffle(arr,arr+26);预示着代码加密是随机的,只有通过词频分析

我的做的时候,quipqiup直接爆破出来,无心之举,结果直接出了😂

[广东省大学生攻防大赛 2021]classic ID:1251

这个题我自己的做的时候直接裂开,这个脑洞题有点离谱,需要熟悉各种密码,当时网上也没有wp,后来找到一位大佬(当时大赛的特等奖)给的wp,再次感谢!

看到密文只有5个字母,考虑ADFGX密码。但是字母不对应,可能是移位或者替换了。
发现凯撒密码移动3位可以全转换为ADFGX

请添加图片描述

ADFGX密码,mixture
在这里插入图片描述
键盘密码解码
在这里插入图片描述

得flagflag{caesarlovesfivelettersinkeyboard}

[SWPUCTF 2021 新生赛]ez_caesar ID:430

import base64
def caesar(plaintext):
    str_list = list(plaintext)
    i = 0
    while i < len(plaintext):
        if not str_list[i].isalpha():
            str_list[i] = str_list[i]
        else:
            a = "A" if str_list[i].isupper() else "a"
            str_list[i] = chr((ord(str_list[i]) - ord(a) + 10) % 26 + ord(a) or 5)
        i = i + 1

    return ''.join(str_list)

flag = ""
str = caesar(flag)
print(str)
#str="U1hYSFlLe2R0em1mYWpwc3RiaGZqeGZ3fQ=="

首先import base64,解出str=SXXHYK{dtzmfajpstbhfjxfw}

然后预期解法看加密程序,不难看得出是位移5位的凯撒密码

非预期就直接爆破

得flagNSSCTF{youhaveknowcaesar}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值