做app网站,网站如何做外链2018,爱网站排行,邯郸市建设局网站政策题目目录 1. 转轮机加密2. easychallenge 上一篇#xff1a;攻防世界题目练习——Crypto密码新手引导模式#xff08;一#xff09;#xff08;持续更新#xff09;
1. 转轮机加密
首先了解一下轮转机加密吧。 传统密码学(三)——转轮密码机
题目内容如下#xff1a; … 题目目录 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
#lwjdwwymbbgmw2. 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.7import base64def encode1(ans):s for i in ans:x ord(i) ^ 36x x 25s chr(x)return sdef encode2(ans):s for i in ans:x ord(i) 36x x ^ 36s chr(x)return sdef 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 base64def decode1(ans):s for i in ans:x ord(i) - 25x x ^ 36s chr(x)return sdef decode2(ans):s for i in ans:x i ^ 36x x - 36s chr(x)return sdef decode3(ans):return base64.b32decode(ans)flag
#print Please Input your flag:
#flag raw_input()
final UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E
#s1decode3(final)
#print(s1)
print(decode1(decode2(decode3(final))))
#输出结果
#cyberpeace{interestinghhhhh}decode2函数本来第一步按照原来encode2函数的写法应该是xord(i)^36但是这样会报错 说是ord() expected string of length 1, but int found。于是我们单独输出decode3之后的结果看看 其实我并不理解输出的结果是什么类型看到 \x 感觉是十六进制但是又出现了字母Z报错也说是int类型。 decode2处理的就是decode3之后的内容既然decode3之后的内容是int类型我们在decode2处就不需要进行ord()转整型了。