[Week1]
Basic Number theory
1 | from Crypto.Util.number import * |
1 | def gift(m, prime): |
所以我们有
由二次剩余
然后我们可以中国剩余定理crt一下计算 exp
1 | from Crypto.Util.number import * |
beyondHex
1 | 这是什么东西? |
17进制转字符 exp
1 | s = "807G6F429C7FA2200F46525G1350AB20G339D2GB7D8" |
certificate
手撕私钥,然后解高次dp攻击
1 | from Crypto.Util.number import * |
two Es
1 | from Crypto.Util.number import * |
共模攻击再开方 exp
1 | n = 118951231851047571559217335117170383889369241506334435506974203511684612137655707364175506626353185266191175920454931743776877868558249224244622243762576178613428854425451444084313631798543697941971483572795632393388563520060136915983419489153783614798844426447471675798105689571205618922034550157013396634443 |
xorRSA
1 | from Crypto.Util.number import * |
pq剪枝 exp
1 | def get_pq(n, x): |
Strange Machine
1 | from secret import msg_len, offset, plaintext |
没看,ai秒了 exp
1 |
[Week2]
Furious BlackCopper
1 | from Crypto.Util.number import * |
已知低20位和中间800位p,仍有10位和194位p未知 爆破10位然后打高位194位copper即可
1 | n = 2319000650261946023915014206488070911640109367250016568220614383532952214807761334558144208472659838958984936464737359601178199471300591809378861719725166071293490337849460977334088817981122030848611809302595213167700327022424485330558133803551058332751191386670140430591951239225137235559261920346492292931776544999900411323158373028200548312764177981464990638015835702492874152704590840093556205478901618714235042276132193643820011286079020600820330604377153242537768363399127325275405368576324108320705517778045911592243192206637554003492442058363346021771705706076757889394174566970697156452713746460116694890476180599323974313009004900787705445305524094335957604088726075970520060978159945766075715871582835253817257735855172650619000718520587778706871170904747089132157549968207256556609060157681221165756365791620541073993550257247751386345594088623340417061806929245714999520220438960372195265546782502907343855788577 |
strange random
1 | from Crypto.Util.number import * |
求一个GCD能拿到q,p,r 给了624组数据,可以直接用RandCrack预测得到e
1 | from Crypto.Util.number import * |
然后测一下数据,发现e和phi不互素,在模q下有限域开根 exp
1 | d=inverse(e//2, (q-1)//2) |
或者写成
1 | phi1=q-1 |
Common RSA
1 | from Crypto.Util.number import * |
先解一个方程拿到p和q
1 | def hint_solve(n, hint): |
然后发现e和phi不互素,解amm
1 | # 设置模数 |
baby Elgamal
1 | from Crypto.Util.number import * |
Elgamal算法+BSGS,但是sage的bsgs不知道为啥32位的都能跑炸掉16G内存
1 | from Crypto.Util.number import * |
findKey in middle
1 | from Crypto.Util.Padding import pad |
中间相遇攻击+crt x = 3x1 ⋅ 5x2 (mod p)
移项x1到左边,变为
3k1 ≡ x ⋅ (5k2)−1 (mod p)
然后左边枚举k1进行建字典,右边同样枚举k2然后查字典验证拿到k1和k2
最后用
1 | from sympy.ntheory.modular import crt |