crypto1_中秋月
此夜中秋月,清光十万家*** 自动钥匙⊕ 明文全大写,得到后转小写,并以_连接单词。 格式:flag{xxx}。 @⎝Lazzaro⎠师傅供题
fsskryenvkm~jl{ejs}jwflzsnpgmifq{
{j{|suhzrjppnx|qvixt~whu
看起来毫无头绪,观察提示,自动钥匙,也就是autokey密码。
网上有它的python2脚本,但是解密后发现不正确,自动钥匙后面有异或的操作,可能题目给出的密文是通过异或得出来的,我们需要再进行异或一下,于是有
message="fsskryenvkm~jl{ejs}jwflzsnpgmifq{
{j{|suhzrjppnx|qvixt~whu"
for i in range(255):#ASCLL---```0-255
res=''
for j in range (0,len(message)):
temp =ord(message[j])^i#python中的^表示异或,在进行异或步骤时,需要把^前后两个数转换为二进制
if 65<=temp<=90 or 97<=temp<=122:#65-90表示A-Z,97-122表示a-z
res+=(chr(temp))
if len(res)==len(message):
print(res)
运行脚本后得到两组数字,再根据题目的提示发现有密文均为大写,即选择密文
YLLTMFZQITRAUSDZULBUHYSELQOXRVYNDDUDCLJWEMUOOQGCNIVGKAHWJ
再根据python脚本,即有
from ngram_score import ngram_score
from pycipher import Autokey
import re
from itertools import permutations
qgram = ngram_score('quadgrams.txt')
trigram = ngram_score('trigrams.txt')
ctext = 'YLLTMFZQITRAUSDZULBUHYSELQOXRVYNDDUDCLJWEMUOOQGCNIVGKAHWJ'
ctext = re.sub(r'[^A-Z]','',ctext.upper())
# keep a list of the N best things we have seen, discard anything else
class nbest(object):
def __init__(self,N=1000):
self.store = []
self.N = N
def add(self,item):
self.store.append(item)
self.store.sort(reverse=True)
self.store = self.store[:self.N]
def __getitem__(self,k):
return self.store[k]
def __len__(self):
return len(self.store)
#init
N=100
for KLEN in range(8,20):
rec = nbest(N)
for i in permutations('ABCDEFGHIJKLMNOPQRSTUVWXYZ',3):
key = ''.join(i) + 'A'*(KLEN-len(i))
pt = Autokey(key).decipher(ctext)
score = 0
for j in range(0,len(ctext),KLEN):
score +=</

本文介绍了三种古典密码的破解过程,包括自动钥匙密码、基于线性变换的加密方法和涉及伽马函数的大数分解挑战。每种破解都详细展示了使用的算法和技术。


被折叠的 条评论
为什么被折叠?



