BUUCTF——CRYPTO(记录不熟悉的题)(5)

[ACTF新生赛2020]crypto-classic1

 

题目让你低头,意思是让你看键盘。在键盘上比划每一组,圈起来的就是每一组代表的字符,由此可以得到解密压缩包的密码:circle

解开后得到密文:

接下来找密钥。根据题目ACTF,猜测接出来的flag应该是‘ACTF开头’,对于维吉尼亚表格可以找到密钥:spsp或者sp

 利用在线网站解出:

 去提交确实错的,看了大佬们的wp后知道buuctf给的密文有问题,正确的密文应该是:

SRLU{OWSI_S_RDPKHARSA_NXYTFTJT}

 换成小写后提交正确。

EasyProgram

不知道用的什么语言,但大致能看懂过程:前三个for循环用来构造s、t两个数组,到了第四个for才用到了flag与s数组异或得到密文,所以只要按照它的顺序来,用python来复原构造过程。

with open("C:\\Users\\lenovo\\Desktop\\file.txt", 'rb') as f:
    flag = f.read().hex()

flagx = [int(str(flag)[i:i+2], 16) for i in range(0, len(flag), 2)]

s = []
for i in range(0,256):
    s.append(i)

t = []
key = 'whoami'
for i in range(0,256):
    t.append(key[i%(len(key))])

j = 0
for i in range(0,256):
    j = (j+s[i]+int(ord(t[i])))%256
    s[i],s[j] = s[j],s[i]


i = j = x = 0
for m in range(0,38):
    i = (i + 1)%256
    j = (j + s[i])%256
    s[i],s[j] = s[j],s[i]
    x = (s[i] + (s[j]%256))%256
    flagx[m] = flagx[m]^s[x]

print(''.join(chr(flagx[i]) for i in range(0, 38)))

[UTCTF2020]hill

希尔加密?没见过,学习一波:

加密过程:

密文矩阵 = 密钥矩阵 * 明文矩阵

给密钥矩阵:\begin{bmatrix} 2 &5 \\ 9& 5 \end{bmatrix} (必须是可逆的

1、首先将明文串转化成数字(a-0,b-1,c-2,以此类推),如给你明文串EastChinaNormalUniversity,则转化后得到4 0 18 19 2 7 8 13 0 13 14 17 12 0 11 20 13 8 21 4 17 18 8 19 24,两两一组写成矩阵形式:

 少了个数,补0

2、加密:

3、对应转成字母:IK BX NB DH NN JD YE SR OB KB UJ HL W

参考:http://t.csdn.cn/bfyli 

s='wznqcaduqopfkqnwofDbzgeu'
flag_pre='utflag'
def getit(a1,b1,c1,a2,b2,c2,a3,b3,c3):
    for i in range(26):
        for j in range(26):
            if (a1 * i + b1 * j) % 26 == c1 and (a2 * i + b2 * j) % 26 == c2 and (a3 * i+b3*j) % 26 == c3:
                return (i,j)
x1=getit(22,25,20,13,16,5,2,0,0)
x2=getit(22,25,19,13,16,11,2,0,6)
import string
flag=''
for i in range(0, len(s),2):
    flag+=string.ascii_letters[(x1[0]*string.ascii_letters.index(s[i])+x1[1]*string.ascii_letters.index(s[i+1]))%26]
    flag+=string.ascii_letters[(x2[0]*string.ascii_letters.index(s[i])+x2[1]*string.ascii_letters.index(s[i+1]))%26]
print(flag)

 得到:

加上初始的数字,以及改正大小写得flag:utflag{d4nger0us_c1pherText_qq}

代码参考:http://t.csdn.cn/fz1UN

[GUET-CTF2019]NO SOS 

给了一行很想摩斯密码的东西,但没有分隔,而且长度不一,题目也说NO SOS(SOS代表用摩斯求救),看了wp才知道是培根,长度统一:

c = '..-.-.-.–…….–..-…-..-…–.-.-….-..-..–.-.-..-.-..—-'.replace('…', '...').replace('—', '---').replace('–', '--')

print(c.replace('.', 'a').replace('-', 'b'))
print(c.replace('.', 'b').replace('-', 'a'))

 参考:http://t.csdn.cn/4rLAi

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值