1.easyrsa8
题目
去网站上解析以下公钥SSL在线工具-公钥解析 (hiencode.com)
得到了e和n
再利用 factordb.com分解n,得到p和q
脚本如下
import gmpy2
from Crypto.Cipher import PKCS1_OAEP
#PKCS1 OAEP 是一种基于 RSA 和 OAEP 填充的非对称密码
from Crypto.PublicKey import RSA
e = 65537
n = 10306247299477991196335954707897189353577589618180446614762218980226685668311143526740800444344046158260556585833057716406703213966249956775927205061731821632025483608182881492214855240841820024816859031176291364212054293818204399157346955465232586109199762630150640804366966946066155685218609638749171632685073
p = 106249972159566919549855203174197828387397831115262336234662051342543151219702510584956705611794290291345944183845955839244363030579896461607496959399297130227066841321473005074379950936513608503266587950271044991876848389878395867601515004796212227929894460104645781488319246866661398816686697306692491058609
q = n//p
phi_n = (p-1)*(q-1)
d = int(gmpy2.invert(e,phi_n))
rsakey = RSA.importKey(open(r'C:\Users\esnh\Downloads\easyrsa8\public.key', 'r').read())
privatekey = RSA.construct((n,e,d,p,q))#这行代码使用RSA的构造函数RSA.construct()创建私钥对象。构造函数的参数是一个元组,包含了RSA算法所需的参数:模数n、公钥指数e、私钥参数d、大素数p和q。
rsa = PKCS1_OAEP.new(privatekey)#使用私钥对象privatekey创建PKCS1_OAEP对象rsa
m = rsa.decrypt(open(r'C:\Users\esnh\Downloads\easyrsa8\flag.enc', 'rb').read())#使用PKCS1_OAEP对象rsa的decrypt()函数对密文文件进行解密操作
print(m)
得到flag
2.crypto4
题目:p=447685307 q=2037 e=17,提交flag{d}即可
考察的是求私钥d
import gmpy2
p=447685307
q=2037
e=17
phi_n=(p-1)*(q-1)
print("d:",gmpy2.invert(e,phi_n))
d: 53616899001
3.crypto5
题目:p=447685307 q=2037 e=17 c=704796792,提交flag{m}
求明文m
import gmpy2
p=447685307
q=2037
e=17
c=704796792
n=p*q
phi_n=(p-1)*(q-1)
d=gmpy2.invert(e,phi_n)
print("m:",pow(c,d,n))
m: 904332399012
4.crypto6
题目:密文为U2FsdGVkX19mGsGlfI3nciNVpWZZRqZO2PYjJ1ZQuRqoiknyHSWeQv8ol0uRZP94MqeD2xz+
密钥为 加密方式 名称,区分大小写
以U2FsdGVkX1为开头,应该是Rabbit加密,密钥为Rabbit
Rabbit加密-Rabbit解密-在线Rabbit加密解密工具
5.crypto7
Ook!!!Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]
6.crypyo8
题目:
由题可知,这是BrainFuck,只有以下8种符号
7.crypto9
之后补充!!!!
8.crypto10
题目:
=E7=94=A8=E4=BD=A0=E9=82=A3=E7=81=AB=E7=83=AD=E7=9A=84=E5=98=B4=E5=94=87=E8=AE=A9=E6=88=91=E5=9C=A8=E5=8D=88=E5=A4=9C=E9=87=8C=E6=97=A0=E5=B0=BD=E7=9A=84=E9=94=80=E9=AD=82
quoted-printable编码,用一个“=”后跟随两个十六进制的数字来表示一个非ASCII字符
Quoted-Printable编码解码在线转换工具-ME2在线工具
9. crypto11
题目:
a8db1d82db78ed452ba0882fb9554fc
32为hash值,猜测MD5,CMD5在线解密
Cmd5 - MD5 Online ,MD5 Decryption, MD5 Hash Decoder
10.crypto0
题目:
gmbh{ifmmp_dug}
凯撒密码,偏移量是25,
11.ctypto12
题目:
uozt{Zgyzhv_xlwv_uiln_xguhsld},不用看了,没提示
根据flag格式,u对应f,o对应l,z对应a,t对应g
埃特巴什码:最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。
明文:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文:ZYXWVUTSRQPONMLKJIHGFEDCBA
直接提交不正确,A改为a
flag{atbase_code_from_ctfshow}
12.crypto13
多重base编码
import base64
filename = r"C:\Users\esnh\Downloads\base家族\base.txt"
with open(filename) as f:
s = f.read()
while True:
try:
s = base64.b16decode(s)
continue
except:
pass
try:
s = base64.b32decode(s)
continue
except:
pass
try:
s = base64.b64decode(s)
continue
except:
pass
break
print(s)
b'flag{b4Se_Fami1y_Is_FUn}'