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)))
妙妙小工具
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甲子年表
|
01 甲子
|
11甲戌
|
21甲申
|
31 甲午
|
41甲辰
|
51甲寅
|
|
02 乙丑
|
12 乙亥
|
22乙酉
|
32 乙未
|
42乙巳
|
52 乙卯
|
|
03 丙寅
|
13丙子
|
23 丙戌
|
33丙申
|
43丙午
|
53丙辰
|
|
04丁卯
|
14丁丑
|
24丁亥
|
34丁酉
|
44丁未
|
54丁巳
|
|
05戊辰
|
15戊寅
|
25戊子
|
35戊戌
|
45戊申
|
55 戊午
|
|
06己巳
|
16己卯
|
26己丑
|
36 己亥
|
46 己酉
|
56 己未
|
|
07庚午
|
17 庚辰
|
27庚寅
|
37 庚子
|
47 庚戌
|
57 庚申
|
|
08辛未
|
18 辛巳
|
28 辛卯
|
38 辛丑
|
48 辛亥
|
58 辛酉
|
|
09壬申
|
19壬午
|
29 壬辰
|
39 壬寅
|
49 壬子
|
59 壬戌
|
|
10癸酉
|
20癸未
|
30 癸巳
|
40 癸卯
|
50 癸丑
|
60 癸亥
|
UUencode
89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]
异性相吸
将两个文件读取出来,两串二进制并运算,将结果转字符串输出。

浙公网安备 33010602011771号