攻防世界-新手练习-转轮机加密

【题目描述】

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

【思路】

轮转机加密原理:

每一行是一个轮子,假设有N个轮子,每个轮子有M个字符。密钥是一串长为数字的串,代表取位顺序。密文是以密钥的顺序取出的,每一个轮子的首位字符组成的串。

解密方法:

Step1:归位。密文的每一个字符是每一行的首字符,则根据密钥的顺位把轮子顺序旋转(循环移位)到对应的密文字符上,如第一个字符(2,N),把第2行< KPBELNACZDTRXMJQOYHGVSFUWI < 的N移到第一位,得到“NACZDTRXMJQOYHGVSFUWIKPBEL”,其余同理。

Step2:读取。每个轮子的取一位,对应明文(即按列读),哪一列有意义就是明文。

python脚本:

# -*- coding:utf-8 -*-

import re

text=""

with open("wheelcipher.txt","r",encoding="utf-8") as f:

    text=f.read()

code=[]#提取字符,放在list里

code=re.findall(r"<(.*)<",text)

for i in range(len(code)):

    code[i]=code[i].strip()  # 删去首尾空串

#print(code)

codetext="NFQKSEVOQOFNP"

codenum="2,3,7,5,13,12,9,1,8,10,4,11,6"

codenum=codenum.split(",")#把这些数字都弄到一个里面去

#print(codenum)

a=0

print("旋转后:")

# 旋转

for i in codenum:

    index=code[int(i)-1].index(codetext[a])

    a=a+1

    code[int(i)-1]=code[int(i)-1][index:]+code[int(i)-1][:index]

    print(code[int(i)-1])

print("\n按列读取:")

for i in range(len(code[0])):

      str=""

      print("第{}列: ".format(i),end="")

      for j in codenum:

          str+=code[int(j)-1][i]

      print(str.lower())

代码引用自 https://blog.csdn.net/qq_43504939/article/details/100058169

结果:

第0列: nfqksevoqofnp

第1列: ahgcxiusnwcbn

第2列: ctwpcubfotuvy

第3列: zetmdrmezgkcc

第4列: dqhneyczuvtxj

第5列: tgszrtqwtrezb

第6列: rypqfawawsbqf

第7列: xxywvsaxdcswz

第8列: mpbxbbojczxed

第9列: jlxygkigvqqrr

第10列: qoiitjkdrkytu

第11列: oczhydzljeips

第12列: ykufhfgullzol

第13列: hblrnhjbxmmio

第14列: gdvlugxvkxjuq

第15列: vmkamlpiiywyx

第16列: sambkvlqsiaav

第17列: fireinthehole

第18列: uzaulcdkfprst

第19列: wvfoomsyaupka

第20列: irdtpxrppdldm

第21列: kncsjzfnmnnjk

第22列: psegzphtyadfg

第23列: bjojqqecgjvhh

第24列: eunvaonrhfhgi

第25列: lwjdwwymbbgmw

通过逐行检验,我们可以看到,有实际意义的在第17列:fireinthehole,是不是燃起来了?!hhh..

【答案】

fireinthehole

如果文章对你有帮助,麻烦动动手指点赞、喜欢、支持一下咖啡猫,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值