刷题第二周
- web
- crypto
- [SWPUCTF 2021 新生赛]crypto4
- [SWPUCTF 2021 新生赛]crypto6
- [SWPUCTF 2021 新生赛]crypto7
- [SWPUCTF 2021 新生赛]crypto8
- [SWPUCTF 2021 新生赛]crypto9
- [SWPUCTF 2021 新生赛]crypto10
- [SWPUCTF 2021 新生赛]ez_caesar
- [鹤城杯 2021]A_CRYPTO
- [强网拟态 2021]拟态签到题
- [鹤城杯 2021]easy_crypto
- [SWPUCTF 2021 新生赛]pigpig
- [SWPUCTF 2021 新生赛]ez_rsa
- [NSSCTF 2022 Spring Recruit]Vigenere
这周主要做了一些 crypto题,学到了rsa算法,下周准备做些web题。
web
[NCTF 2018]签到题
f12在响应头里找到
crypto
[SWPUCTF 2021 新生赛]crypto4
rsa已知e,n,c,求m
先把n分解
c = 10227915341268619536932290456122384969242151167487654201363877568935534996454863939953106193665663567559506242151019201314446286458150141991211233219320700112533775367958964780047682920839507351492644735811096995884754664899221842470772096509258104067131614630939533042322095150722344048082688772981180270243
p = 7221289171488727827673517139597844534869368289455419695964957239047692699919030405800116133805855968123601433247022090070114331842771417566928809956044421
q = 7221289171488727827673517139597844534869368289455419695964957239047692699919030405800116133805855968123601433247022090070114331842771417566928809956045093
e = 0x10001
phi=(p - 1) * (q - 1)
d = gmpy2.invert(e, phi)
n = p * q
m = powmod(c, d, n)
print(long_to_bytes(m))
b'NSSCTF{no_why}'
[SWPUCTF 2021 新生赛]crypto6
base解码
https://ctf.bugku.com/tools
[SWPUCTF 2021 新生赛]crypto7
MD5解密
https://www.cmd5.com/
[SWPUCTF 2021 新生赛]crypto8
UUENCODE是将二进制文件转换为文本文件的过程,转换后的文件可以通过纯文本e-mail进行传输,在接收方对该文件进行uudecode,即将其转换为初始的二进制文件。
uuencode在线解码网站
http://www.metools.info/master/uuencode158.html
[SWPUCTF 2021 新生赛]crypto9
AKKPLX{qv5x0021-7n8w-wr05-x25w-7882ntu5q984}
脚本给你了,去解吧
letter_list = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' # 字母表
# 根据输入的key生成key列表
def Get_KeyList(key):
key_list = []
for ch in key:
key_list.append(ord(ch.upper()) - 65)
return key_list
# 加密函数
def Encrypt(plaintext, key_list):
ciphertext = ""
i = 0
for ch in plaintext: # 遍历明文
if 0 == i % len(key_list):
i = 0
if ch.isalpha(): # 明文是否为字母,如果是,则判断大小写,分别进行加密
if ch.isupper():
ciphertext += letter_list[(ord(ch) - 65 + key_list[i]) % 26]
i += 1
else:
ciphertext += letter_list[(ord(ch) - 97 + key_list[i]) % 26].lower()
i += 1
else: # 如果密文不为字母,直接添加到密文字符串里
ciphertext += ch
return ciphertext
# 解密函数
def Decrypt(ciphertext, key):
plaintext = ""
i = 0
for ch in ciphertext: # 遍历密文
if 0 == i % len(key_list):
i = 0
if ch.isalpha(): # 密文为否为字母,如果是,则判断大小写,分别进行解密
if ch.isupper():
plaintext += letter_list[(ord(ch) - 65 - key_list[i]) % 26]
i += 1
else:
plaintext += letter_list[(ord(ch) - 97 - key_list[i]) % 26].lower()
i += 1
else: # 如果密文不为字母,直接添加到明文字符串里
plaintext += ch
return plaintext
if __name__ == '__main__':
print("加密请按D,解密请按E:")
user_input = input();
while (user_input != 'D' and user_input != 'E'): # 输入合法性判断
print("输入有误!请重新输入:")
user_input = input()
print("请输入密钥:")
key = input()
while (False == key.isalpha()): # 输入合法性判断
print("输入有误!密钥为字母,请重新输入:")
key = input()
key_list = Get_KeyList(key)
if user_input == 'D':
# 加密
print("请输入明文:")
plaintext = input()
ciphertext = Encrypt(plaintext, key_list)
print("密文为:\n%s" % ciphertext)
else:
# 解密
print("请输入密文:")
ciphertext = input()
plaintext = Decrypt(ciphertext, key_list)
print("明文为:\n%s" % plaintext)
一开始没看懂,百度后发现是维吉尼亚。
根据NSSCTF可以得到秘钥为NSS
维吉尼亚解密网站https://ctf.bugku.com/tool/vigenere
[SWPUCTF 2021 新生赛]crypto10
Rot13解码
[SWPUCTF 2021 新生赛]ez_caesar
先base64再caesar5
[鹤城杯 2021]A_CRYPTO
[强网拟态 2021]拟态签到题
base64
[鹤城杯 2021]easy_crypto
社会主义价值观解码
[SWPUCTF 2021 新生赛]pigpig
猪圈密码
[SWPUCTF 2021 新生赛]ez_rsa
payload
import gmpy2
p = 1325465431
q = 152317153
e = 65537
phi = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi)
print(d)
NSSCTF{08bb8fb628da85923e5734a75ac19ffe}
[NSSCTF 2022 Spring Recruit]Vigenere
维吉尼亚在线网站https://www.guballa.de/vigenere-solver