持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
[ACTF新生赛2020]crypto-classic1
下载附件得到一个hint和一个压缩包:
哇,这里有压缩包的密码哦,于是我低下了头,看向了我的双手,试图从中找到某些规律
xdfv ujko98 edft54 xdfv pok,.; wsdr43
判断是键盘加密,每组字母包围起来的字母分别为:circle。
于是我们可以解得密文:
SRLU{LZPL_S_UASHKXUPD_NXYTFTJT}
根据以往得做题经验,SRLU未加密前应为ACTF,编写脚本如下来去解维吉尼亚密码:
#破解key
s='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
s1='ACTF'
s2='SRLU'
key =''
for i in range(len(s1)):
key+=s[(s.find(s2[i])-s.find(s1[i]))%26]
print key
#解密
cipher = 'SRLU{LZPL_S_UASHKXUPD_NXYTFTJT}'
key = 'SP'
#decode
flag = ''
for i in range(0,len(cipher)):
flag += table[(table.find(cipher[i])+26-table.find(key[i%len(key)]))%26]
print flag
#ACTFHWHATKAKCLASSICALKVIGENEREH
'''
cipher = SRLU{LZPL_S_UASHKXUPD_NXYTFTJT}
flag{WHAT_A_CLASSICAL_VIGENERE}
'''
[ACTF新生赛2020]crypto-aes
下载附件得到AES.py:
from Cryptodome.Cipher import AES
import os
import gmpy2
from flag import FLAG
from Cryptodome.Util.number import *
def main():
key=os.urandom(2)*16
iv=os.urandom(16)
print(bytes_to_long(key)^bytes_to_long(iv))
aes=AES.new(key,AES.MODE_CBC,iv)
enc_flag = aes.encrypt(FLAG)
print(enc_flag)
if __name__=="__main__":
main()
output里的内容为:
91144196586662942563895769614300232343026691029427747065707381728622849079757
b'\x8c-\xcd\xde\xa7\xe9\x7f.b\x8aKs\xf1\xba\xc75\xc4d\x13\x07\xac\xa4&\xd6\x91\xfe\xf3\x14\x10|\xf8p'
简单分析一下里面得函数:
形如os.urandom(n)*k是返回k个n随机字节,key是两个不断重复的字节组成,key是32字节,iv(偏移量)是16字节,只有 iv 与 key的低128位相异或,所以key的高128位是固定不变的。我们根据推理求出iv的值,然后就可以解密了:
from Crypto.Cipher import AES
import os
from gmpy2 import*
from Crypto.Util.number import*
xor = 91144196586662942563895769614300232343026691029427747065707381728622849079757
enc_flag = b'\x8c-\xcd\xde\xa7\xe9\x7f.b\x8aKs\xf1\xba\xc75\xc4d\x13\x07\xac\xa4&\xd6\x91\xfe\xf3\x14\x10|\xf8p'
out = long_to_bytes(xor)
key = out[:16]*2
# print(key)
iv = bytes_to_long(key[16:])^bytes_to_long(out[16:])
# print(iv)
iv = long_to_bytes(iv)
# print(iv)
aes = AES.new(key,AES.MODE_CBC,iv)
flag = aes.decrypt(enc_flag)
print(flag)
得到flag:
actf{W0W_y0u_can_so1v3_AES_now!}
[GUET-CTF2019]NO SOS
下载附件,得到:
..-.-.-.–…….–..-…-..-…–.-.-….-..-..–.-.-..-.-..—-
怀疑是莫斯密码,但根据NO SOS判断又不是SOS密码。
因为密文格式不太规范,我们修改一下:
..-.-.-.--.......--..-...-..-...--.-.-....-..-..--.-.-..-.-..----
转成二进制数据看一下:
0010101011000000011001000100100011010100001001001101010001001111
尝试一下培根密码,把01看成ab 。
aababababbaaaaaaabbaabaaabaabaaabbababaaaabaabaabbababaababaabbbb
找个网站解密一下:
得到:
flag{guetkkp}
突然发现好久没做密码题目了,于是我今天就简单刷了几个密码题目,感觉都还是挺有难度的,包括但不先AES的异或,还有了解比较少的培根密码,也算是扩展了一下做题的思路。也学到了一些不曾重视的知识点。明天继续刷一下。