Crypto

基础小知识


hex(m)[2:]             #m为十进制,hex(m)将十进制转成十六进制,用[2:]截去0x
bytes.fromhex(m)       #m为十六进制,十六进制转字符串

t=open("data.txt","r").readlines()
result=[]
for i in t:
    i=i.strip("\n")#去除每行的换行符
    result.append(chr(pow(int(i),d,n)))

妙妙小工具


jsons

因式分解


RSA


#invert,pow所用的库
from gmpy2 import *

n->因式分解得到p,q
c=(m^e)modn
m=(c^d)modn
->m=pow(c,d,n)
Fn=(p-1)*(q-1)
edmodFn=1
d=invert(e,Fn)
n1,n2共用q->q=gdc(n1,n2)
已知有p,q,dp,dq
m1=c^dp mod p
m2=c^dq mod q
m=((((m1-m2)*Fn)%p)*q)+m2
已知c1,c2,e1,e2,n,使用共模攻击可得
c1=m^e1 mod n
c2=m^e2 mod n
其中,e1与e2的关系有
e1s1+e2s2=1
通过e1,e2求出s1,s2
r,s1,s2=gcdext(e1,e2)
m=((c1^s1 mod n)*(c2^s2 mod n))mod n
即
m=(pow(c1,s1,n)*pow(c2,s2,n))%n
已有文件flag.enc和pub.key
publi.key:
-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+
/AvKr1rzQczdAgMBAAE=
-----END PUBLIC KEY-----
解析出来e,n
由n得到p,q
引入rsa:import rsa
构造私钥:rsa.PrivateKey(n,e,int(d),p,q)
读取flag.enc:open("flag.enc":"rb").read()
解密:rsa.decrypt(flag,私钥)
低指数e=3
m=iroot(c,e)
逐个试,或者写个循环

格式


中文电码

长度为4的倍数,查询工具

606046152623600817831216121621196386

凯撒替换版

MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO} 

MTHJ与flag在ASCII上没有直接关联,使用替换网站,输入特征MTHJ=flag,得到符合特征的字符串

猪圈密码

工具

传统知识:60甲子年表

 

UUencode

89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]

 

异性相吸

将两个文件读取出来,两串二进制并运算,将结果转字符串输出。

 

 


 

posted @ 2023-09-30 21:18  willingyut  阅读(42)  评论(0)    收藏  举报