攻防世界crypto部分

Easy-one

开始时发现encrpto.c给了密钥,但是用它解密msg002.enc是乱码,并不能得到。发现文件里的两个文件,msg001 和msg001.enc得到密钥。

解密脚本如下:

# -*- coding: utf-8 -*-
# coding:unicode_escape
#import pandas as pd
#r=open("msg002.enc","r",encoding="unicode_escape")
#fr=r.read()
k= "Hi! This is only test message"
t=0
f=open("msg001.enc",'rb')
a=f.read()
#print(a)
s=(len(k))
ss=0
key=""
for ss in range(s):
    i=a[ss]
    for j in range(128):
        h=(i-(j^t)-ss*ss)&0xff
        if h==ord(k[ss]):
            key=key+chr(j)
            t=h
            break
print(key)

得到密钥为VeryLongKeyYouWillNeverGuessV,把多输出的V去了,得到正确的解密密钥VeryLongKeyYouWillNeverGuess,解密脚本如下:

key1="VeryLongKeyYouWillNeverGuess"
ff=open("msg002.enc",'rb')
ff=ff.read()
q=0
t1=0
flag=""
for p in ff:
    m=(p-(ord(key1[q%len(key1)])^t1)-q*q)&0xff
    t1=m
    q=q+1
    flag=flag+chr(m)
print(flag)

这里用到了文件打开的知识

f=open("flag.enc",'rb')

一定得用单引号,不然没有效果,可以选择打开编码的方式

#r=open("msg002.enc",‘r’,encoding="unicode_escape")

这个是语言库,开始时默认打开文件时会报错,装了上面的库,但是并没有啥作用,仅仅能正常打开。
解密脚本的关键理解在于^0xff,也就是取二进制展开的后八位

a+b+c^0xff=d
那么
a=(d-b-c)^0xff
print((9+900+1000)&0xff)
print((117-900-1000)&0xff)

在这里插入图片描述

你可能感兴趣的:(crypto)