Fork me on GitHub

Bugku-CTF加密篇之 托马斯.杰斐逊

 

托马斯.杰斐逊

1: <ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2: <KPBELNACZDTRXMJQOYHGVSFUWI <
3: <BDMAIZVRNSJUWFHTEQGYXPLOCK <
4: <RPLNDVHGFCUKTEBSXQYIZMJWAO <
5: <IHFRLABEUOTSGJVDKCPMNZQWXY <
6: <AMKGHIWPNYCJBFZDRUSLOQXVET <
7: <GWTHSPYBXIZULVKMRAFDCEONJQ <
8: <NOZUTWDCVRJLXKISEFAPMYGHBQ <
9: <QWATDSRFHENYVUBMCOIKZGJXPL <
10: <WABMCXPLTDSRJQZGOIKFHENYVU <
11: <XPLTDAOIKFZGHENYSRUBMCQWVJ <
12: <TDSWAYXPLVUBOIKZGJRFHENMCQ <
13: <BMCSRFHLTDENQWAOXPYVUIKZGJ <
14: <XPHKZGJTDSENYVUBMLAOIRFCQW <
密钥: 2,5,1,3,6,4,9,7,8,14,10,13,11,12
密文:HCBTSXWCRQGLES
flag格式 flag{你解密的内容}
 
 
本题要点:转轮加密
 
 
 
首先看到题目是托马斯·杰弗逊........
 
百度搜索一下
 
摘一段托马斯·杰弗逊的介绍.....
 
托马斯·杰弗逊(Thomas Jefferson,1743—1826),美国《独立宣言》的主要作者,并成为第三任美国总统(1801—1809)。他被认为是美国历史上最具智慧的总统之一,不但是杰出的政治家,而且也是农业学、园艺学、建筑学、词源学、考古学、数学、测量学及古生物学等学科的专家,又身兼作家、律师和小提琴手,还创办了维吉尼亚大学 托马斯·杰弗逊(Thomas Jefferson,1743—1826),美国《独立宣言》的主要作者,并成为第三任美国总统(1801—1809)。他被认为是美国历史上最具智慧的总统之一,不但是杰出的政治家,而且也是农业学、园艺学、建筑学、词源学、考古学、数学、测量学及古生物学等学科的专家,又身兼作家、律师和小提琴手,还创办了维吉尼亚大学。
 
(重点来了!!!!)
 
杰弗逊甚至对密码学也深有研究。他在1795年发明了一种加密装置叫做杰弗逊圆盘(Jefferson disk ),或叫杰弗逊转轮加密器(Jefferson wheel cipher )。
这个装置有36片同样大小的木制转轮,套在一根铁杆上。每片转轮的圆周边缘上刻有乱序的26个英文字母 。其使用方法是:进行秘密通信的双方必须各自拥有完全一样转轮加密器。当一方要把一段文字(不超过 36字)秘密通知身处异地的对方时,只需转动加密器上的各片转轮,使这段文字正好出现在同一行上,这时转轮上排列的其他25 行都是无意义的乱码;再把其中任意一行的乱码抄下来交给信使。信使并不知道这段乱码文字的意义,只负责把它送交对方。对方收到乱码信后,只需拿出自己保存的同样的装置,转动上面各片转轮,让其中一行的排列和这段乱码同处在一行上,然后再查看其他25 行上的内容,其中必然有一行显示出加密者要传达的信息,而其他行显示的都是乱码。
 
 
首先我们需要根据密钥将14行字符串调整顺序
第一行是原来的第二行,第二行是原来的第五行,以此类推.......
 
密钥: 2,5,1,3,6,4,9,7,8,14,10,13,11,12
1: <ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: <KPBELNACZDTRXMJQOYHGVSFUWI < 3: <BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: <RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: <IHFRLABEUOTSGJVDKCPMNZQWXY < 6: <AMKGHIWPNYCJBFZDRUSLOQXVET < 7: <GWTHSPYBXIZULVKMRAFDCEONJQ < 8: <NOZUTWDCVRJLXKISEFAPMYGHBQ < 9: <QWATDSRFHENYVUBMCOIKZGJXPL < 10: <WABMCXPLTDSRJQZGOIKFHENYVU < 11: <XPLTDAOIKFZGHENYSRUBMCQWVJ < 12: <TDSWAYXPLVUBOIKZGJRFHENMCQ < 13: <BMCSRFHLTDENQWAOXPYVUIKZGJ < 14: <XPHKZGJTDSENYVUBMLAOIRFCQW <

  

 
 
调整后为:
 
KPBELNACZDTRXMJQOYHGVSFUWI
IHFRLABEUOTSGJVDKCPMNZQWXY
ZWAXJGDLUBVIQHKYPNTCRMOSFE
BDMAIZVRNSJUWFHTEQGYXPLOCK
AMKGHIWPNYCJBFZDRUSLOQXVET
RPLNDVHGFCUKTEBSXQYIZMJWAO
QWATDSRFHENYVUBMCOIKZGJXPL
GWTHSPYBXIZULVKMRAFDCEONJQ
NOZUTWDCVRJLXKISEFAPMYGHBQ
XPHKZGJTDSENYVUBMLAOIRFCQW
WABMCXPLTDSRJQZGOIKFHENYVU
BMCSRFHLTDENQWAOXPYVUIKZGJ
XPLTDAOIKFZGHENYSRUBMCQWVJ
TDSWAYXPLVUBOIKZGJRFHENMCQ

  

 
接着,我们需要对密文调整每行字符串
密文第一个字符H,第一行则变为:HGVSFUWIKPBELNACZDTRXMJQOY
密文第二个字符C,第二行则变为:CPMNZQWXYIHFRLABEUOTSGJVDK
以此类推.........
 
密文:HCBTSXWCRQGLES
 
HGVSFUWIKPBELNACZDTRXMJQOY
CPMNZQWXYIHFRLABEUOTSGJVDK
BVIQHKYPNTCRMOSFEZWAXJGDLU
TEQGYXPLOCKBDMAIZVRNSJUWFH
SLOQXVETAMKGHIWPNYCJBFZDRU
XQYIZMJWAORPLNDVHGFCUKTEBS
WATDSRFHENYVUBMCOIKZGJXPLQ
CEONJQGWTHSPYBXIZULVKMRAFD
RJLXKISEFAPMYGHBQNOZUTWDCV
QWXPHKZGJTDSENYVUBMLAOIRFC
GOIKFHENYVUWABMCXPLTDSRJQZ
LTDENQWAOXPYVUIKZGJBMCSRFH
ENYSRUBMCQWVJXPLTDAOIKFZGH
SWAYXPLVUBOIKZGJRFHENMCQTD

  

 
观察变换后的字符串,倒数第六列即为flag
 
flag{XSXSBUGKUADMIN}
提交发现不对,换成小写就可以啦~
 
flag{xsxsbugkuadmin}

  

 
方法二:
 
#! /usr/bin/env python3
# -*- coding: UTF-8 -*-
 

 
#秘钥
key="2,5,1,3,6,4,9,7,8,14,10,13,11,12"
#密文
cipher_text = "HCBTSXWCRQGLES"
 
 
f = open("zhuanlun.txt")
str_first_encry = []
 
 
for line in f:
    line = line.strip()
    str_first_encry.append(line)
 
 
key_index = key.split(",")
str_second_encry=[]
for k in key_index:
    str_second_encry.append(str_first_encry[int(k)-1])
    print(str_first_encry[int(k)-1])
 
 
for i,ch in enumerate(cipher_text):
    line = str_second_encry[i]
    split_index = line.index(ch)
    temp=[]
    temp[0:len(line)-split_index+1] = line[split_index:len(line)]
    temp[len(temp):] = line[0:split_index]
    str_second_encry[i] = "".join(temp)
print("-------------------------------------")
for plain in str_second_encry:
    print(plain)

  

 
 
 运行结果如下:
 
 
 
 
 
flag{xsxsbugkuadmin}

  

 
完成~
 
 
 
 
参考资料:
 
http://foreversong.cn/archives/138
https://www.jianshu.com/p/3a9840c35f2c
 
 
 
 
 
 
posted @ 2019-11-07 10:40  0yst3r  阅读(3643)  评论(0编辑  收藏  举报
返回顶部