首页 > 其他分享 >Crypto_XCTF_WriteUp | 轮转机加密

Crypto_XCTF_WriteUp | 轮转机加密

时间:2023-11-17 18:24:02浏览次数:41  
标签:13 WriteUp 轮转机 list Crypto 26 key print rot

题目

提示
你俩继续往前走,来到了前面的下一个关卡,这个铺面墙上写了好多奇奇怪怪的 英文字母,排列的的整整齐齐,店面前面还有一个大大的类似于土耳其旋转烤肉的架子,上面一圈圈的 也刻着很多英文字母,你是一个小历史迷,对于二战时候的历史刚好特别熟悉,一拍大腿:“嗨呀!我知道 是什么东西了!”。提示:托马斯·杰斐逊。

flag,是字符串,小写。

题目
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 <

密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
密文为:NFQKSEVOQOFNP

分析

一开始以为是之前学的那种 Enigma 机加密,写代码跑了跑提交发现是错的,查了一下才知道 Enigma 机只是轮转机的一种。
这道题一共有 13 个转子,每个转子是 26 个英文字母的排列。密钥和密文皆为 13 位,和转字的数量相同。

提示提到托马斯·杰斐逊,百度了一下没找到他和轮转机的关联,遂浅看了一下大佬的 WriteUp(小声……
总的来说,密文是密钥对应转子旋转前的第一个字符,且所有转子最初按照密钥顺序排列。

按照这个原理,编写程序:

import numpy as np

rot = [list("ZWAXJGDLUBVIQHKYPNTCRMOSFE"),
       list("KPBELNACZDTRXMJQOYHGVSFUWI"),
       list("BDMAIZVRNSJUWFHTEQGYXPLOCK"),
       list("RPLNDVHGFCUKTEBSXQYIZMJWAO"),
       list("IHFRLABEUOTSGJVDKCPMNZQWXY"),
       list("AMKGHIWPNYCJBFZDRUSLOQXVET"),
       list("GWTHSPYBXIZULVKMRAFDCEONJQ"),
       list("NOZUTWDCVRJLXKISEFAPMYGHBQ"),
       list("XPLTDSRFHENYVUBMCQWAOIKZGJ"),
       list("UDNAJFBOWTGVRSCZQKELMXYIHP"),
       list("MNBVCXZQWERTPOIUYALSKDJFHG"),
       list("LVNCMXZPQOWEIURYTASBKJDFHG"),
       list("JZQAWSXCDERFVBGTYHNUMKILOP")]
key = [2, 3, 7, 5, 13, 12, 9, 1, 8, 10, 4, 11, 6]
c = "NFQKSEVOQOFNP"

# 按密文轮转
for i in range(13):
    for j in range(26):
        if rot[key[i] - 1][j] == c[i]:
            temp = rot[key[i] - 1][:j]
            rot[key[i] - 1][0:26 - j] = rot[key[i] - 1][j:]
            rot[key[i] - 1][26 - j:] = temp
            break
    print(''.join(rot[i]))
print()

# 按密钥更改转子顺序
rot_new = np.zeros((13, 26)).astype(np.str_)
for i in range(13):
    rot_new[i][0:] = rot[key[i] - 1]
    print(''.join(rot_new[i]))
print()

# 按列小写读取
for i in range(26):
    for j in range(13):
        print(rot_new[j][i].lower(), end='')

在最终输出的所有明文排列中,仅 fireinthehole 是有意义的字符串:

直接提交即可通过。

Flag

fireinthehole

参考

攻防世界-新手-crypto-转轮机加密-根本不是咖啡猫-知乎
Python list 和str互相转换的几种方法-风暴之灵-知乎
Python numpy(np)创建空的字符串数组、矩阵-蒋户川柯基-CSDN
Python中多个print内容打印在同一行-老班(Snow)-CSDN
Python字母大小写的转换(两种方法)-舍得斋-CSDN

标签:13,WriteUp,轮转机,list,Crypto,26,key,print,rot
From: https://www.cnblogs.com/Guanz/p/17839441.html

相关文章

  • “技能兴鲁”职业技能大赛-网络安全赛项-学生组初赛 Crypto WP
    babyRSA查看代码fromgmpy2import*fromCrypto.Util.numberimport*flag='flag{I\'mnotgonnatellyoutheFLAG}'#这个肯定不是FLAG了,不要交这个咯p=getPrime(2048)q=getPrime(2048)m1=bytes_to_long(bytes(flag.encode()))e1=3247473589e2......
  • Crypto_BUUCTF_WriteUp | 还原大师
    题目我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD......
  • cryptography hash 算法使用
    安装pipinstallcryptography使用方法fromcryptography.hazmat.primitivesimporthashesdigest=hashes.Hash(hashes.SHA256())#digest=hashes.Hash(hashes.SHA3_256())#digest=hashes.Hash(hashes.SM3())digest.update(b"abc")print(digest.finalize())......
  • Buuctf-Crypto-之深夜刷题部分wp
    萌萌哒的八戒首先下载好附件,解压,是一幅猪图,图的下方是一串看不懂的字,百度输入关键词猪、密码,可知这是猪圈密码,手撸得WHENTHEPIGWANTTOEAT大写不对,换成小写。whenthepigwanttoeat传统知识+古典密码首先下载好附件,解压:小明某一天收到一封密信,信中写了几个不同的年份辛卯,癸巳......
  • Web_XCTF_WriteUp | pure_color
    题目分析给了个纯白png图片,看来是图片隐写题。按照隐写题的解题思路,依次进行了:打开图片属性寻找flag:未果用010Editor打开文件代码寻找flag及查看文件的开头/结束标志:没有找到flag,标志也分别是png文件的开头/结束标志,没有异常因为这两天重装了虚拟机,所以先用......
  • Web_BUUCTF_WriteUp | [ACTF2020 新生赛]Include
    题目分析F12打开查看器,只有一个php文件,URL为http://9862c108-f9d1-4746-aeb0-848c1e0d8147.node4.buuoj.cn:81点tips看看,啥也妹有,URL为http://9862c108-f9d1-4746-aeb0-848c1e0d8147.node4.buuoj.cn:81/?file=flag.php完全没有头绪……又能学新东西了!找到一篇大......
  • buuctf——crypto(1-20)
    1.发现是bese加密,直接使用在线工具解开2.MD5加密,直接使用在线工具解开3.url加密,直接使用在线工具解开4.使用ctf工具随波逐流乱杀。乱杀5.摩斯密码,直接ctf工具随波逐流乱杀6.根据提示,张三的缩写,加上生日刚好满足flag的格式7.凯撒变异密码,使用脚本直接弄出来了8.看到太熟悉了......
  • Web_BUUCTF_WriteUp | Havefun
    题目分析用鼠标划了半天,好像不能撸(F12打开控制台,在查看器里看到一条PHP注释$cat=$_GET['cat'];echo$cat;if($cat=='dog'){echo'Syc{cat_cat_cat_cat}';}分析一下注释:$cat=$_GET['cat'];:变量cat获得变量_GET收集的来自method="get"的表单中的值。e......
  • 2023强网拟态crypto-一眼看出
    1、题目信息一眼看穿查看代码 fromCrypto.Util.numberimport*fromsecretimportflagimportgmpy2flag=b''r=getPrime(6)a=1100124079130849656541177384550975435259748146428827269932523139547213714461077464537281214967514136060046964049287422354......
  • 强网新拟态 Reverse Writeup
    fisher真正的验证逻辑在main函数的catch块里,不过走到需要满足输入的sha1的值等于2e95a5c5f9643df668d3965a6cdf19541bc0496b,后面发现没影响直接调进去就行。分析一下,加密流程如下:table='ghijklpqrstuvwxyzABCabcDEFdef0123GHI4567JKL+/MNOmnoPQRSXYZ8TUVW9'flag=i......