RSA
文章平均质量分 79
rsa
前方是否可导?
随风而行,随心而行。
展开
-
N1CTF2020crypto Easy RSA?
task.sagefrom Crypto.Util.number import *import numpy as npmark = 3**66def get_random_prime(): total = 0 for i in range(5): total += mark**i * getRandomNBitInteger(32) fac = str(factor(total)).split(" * ") return int(fac[-1])原创 2020-10-23 20:30:00 · 1097 阅读 · 1 评论 -
babyrsa(RSA parity oracle,二分)
给服务器一个加密后的数据,会返回解密后的结果是奇数还是偶数.RSA parity oracle具体可以维基百科.点这e = 0x10001n = 0x0b765daa79117afe1a77da7ff8122872bbcbddb322bb078fe0786dc40c9033fadd639adc48c3f2627fb7cb59bb0658707fe516967464439bdec2d6479fa3745f57c0a5ca255812f0884978b2a8aaeb750e0228cbe28a1e5a原创 2020-10-07 22:38:20 · 854 阅读 · 0 评论 -
[Zer0pts2020]ROR
encryptimport randomfrom secret import flagror = lambda x, l, b: (x >> l) | ((x & ((1<<l)-1)) << (b-l))N = 1for base in [2, 3, 7]: N *= pow(base, random.randint(123, 456))e = random.randint(271828, 314159)m = int.from_by原创 2020-09-01 17:49:27 · 540 阅读 · 0 评论 -
[HDCTF2019]bbbbbbrsa
encryptfrom base64 import b64encode as b32encodefrom gmpy2 import invert,gcd,irootfrom Crypto.Util.number import *from binascii import a2b_hex,b2a_heximport randomflag = "******************************"nbit = 128p = getPrime(nbit)q = getPrime(n原创 2020-08-15 20:50:19 · 1322 阅读 · 0 评论 -
buu RSA5(最大公因子分解)
encryptm = xxxxxxxxe = 65537========== n c ==========n = 204749188940517785333052623456018809280882844711218237540497253540724771558737788480550738433458206978866410868426124865412501839659660015913420315629535617933323416413343028479961084174663606881原创 2020-08-09 20:57:58 · 600 阅读 · 0 评论 -
phrackCTF----very hard RSA(共模攻击)
encrypt#!/usr/bin/env pythonimport randomN = 0x00b0bee5e3e9e5a7e8d00b493355c618fc8c7d7d03b82e409951c182f398dee3104580e7ba70d383ae5311475656e8a964d380cb157f48c951adfa65db0b122ca40e42fa709189b719a4f0d746e2f6069baf11cebd650f14b93c977352fd13b1eea6d6e1da77原创 2020-08-09 14:08:07 · 897 阅读 · 0 评论 -
phrackCTF ---hard RSA
题目给的是一个二次剩余首先分解成:c= x2 %pc=x2 %q分别求得 x1,-x1,(mod p) x2,-x2(mod q)然后 用中国剩余定理合并(一共有4种情况)crt([余数集合],[模数集合])#PCTF{sp3ci4l_rsa}原创 2020-08-09 13:37:04 · 744 阅读 · 1 评论 -
babyRSA1(多项式分解)
encrypt#!/usr/bin/env sage# coding=utf-8from pubkey import P, n, efrom secret import flagfrom os import urandomR.<a> = GF(2^2049)def encrypt(m): global n assert len(m) <= 256 m_int = Integer(m.encode('hex'), 16) m_poly =原创 2020-08-08 19:27:17 · 664 阅读 · 0 评论 -
[watevrCTF 2019]ECC-RSA
encryptfrom fastecdsa.curve import P521 as Curvefrom fastecdsa.point import Pointfrom Crypto.Util.number import bytes_to_long, isPrimefrom os import urandomfrom random import getrandbitsdef gen_rsa_primes(G): urand = bytes_to_long(urandom(521//8))原创 2020-08-08 14:17:56 · 933 阅读 · 0 评论 -
已知高比特位p分解n
encrypt#! /usr/bin/env python# -*- coding: utf-8 -*-from Crypto.Util.number import getPrime, long_to_bytes, bytes_to_long, isPrime, getRandomNBitIntegerfrom libnum import invmoddef destory(x, num): while True: dt = getRandomNBitInteger(num) r =原创 2020-08-07 20:41:04 · 781 阅读 · 0 评论 -
rsa中已知 n,e,d 来分解n
在rsa中,如果已知n,e,d 的话可以试着用以下方法来分解n由e,d 的定义我们可以知道:ed-1=k(p-1)(q-1)这里我们任取一个小于n的数g从而:ged-1 =gk(p-1)(q-1)在mod n 下ged-1 =1故pq=ged-1 -1=0 (mod n)令 k=ed-1则:pq=gk -1=(gk/2 -1)(gk/2 +1) = 0(mod n)我们可以发现如果gk/2 -1 在 mod n下 如果等于p或者q (即与n有非1最大公因子) 那么就可以分解n了.原创 2020-08-07 20:25:49 · 4741 阅读 · 0 评论 -
rsa加密(m<n)
encrypt#!/usr/bin/env python3import gmpy2from Crypto.Util.number import getPrimefrom Crypto.PublicKey import RSAfrom Crypto.Cipher import PKCS1_v1_5from base64 import b64encodeflag = open('flag', 'r').read().strip() * 23def encrypt(p, q, e, msg原创 2020-08-07 17:43:39 · 696 阅读 · 0 评论 -
[NPUCTF2020]共 模 攻 击(sage解方程)
encrypthint:from gmpy2 import *from Crypto.Util.number import *from secret import hintm = bytes_to_long(hint)p = getPrime(256)c = pow(m, 256, p)print(p)p, q = getPrime(256), getPrime(256)n = p * qe1, e2 = getPrime(32), getPrime(32)c1, c2 = po原创 2020-08-06 23:45:30 · 2267 阅读 · 2 评论 -
[INSHack2017]rsa16m
题目给的c,n很大很大,同时给的e相比较小,所以很有可能me 还是比n小,于是可以直接尝试对c开e次方。e=0x10001with open('a.txt','r') as f: x=f.read()import gmpy2c=eval(x)m=gmpy2.iroot(c,e)[0]import Crypto.Util.numberprint(Crypto.Util.number.long_to_bytes(m))#b'INSA{(I)NSA_W0uld_bE_pr0uD}'原创 2020-07-27 22:31:02 · 500 阅读 · 0 评论 -
[XNUCA2018]Warmup
encryptfrom Crypto.Util.number import bytes_to_long, getPrimefrom random import randintfrom gmpy2 import powmodimport sysp = getPrime(1024)q = getPrime(1024)N = p*qPhi = (p-1)*(q-1)with open("flag", 'r') as fr: flag = bytes_to_long(fr.read().st原创 2020-07-27 21:11:07 · 554 阅读 · 0 评论 -
[INSHack2019]Yet Another RSA Challenge
encryptimport subprocessp = subprocess.check_output('openssl prime -generate -bits 2048 -hex')q = subprocess.check_output('openssl prime -generate -bits 2048 -hex')flag = int('INSA{REDACTED}'.encode('hex'), 16)N = int(p,16) * int(q,16)print Nprint原创 2020-07-27 19:32:47 · 653 阅读 · 0 评论 -
[NPUCTF2020]认清形势,建立信心
encryptfrom Crypto.Util.number import *from gmpy2 import *from secret import flagp = getPrime(25)e = # Hiddenq = getPrime(25)n = p * qm = bytes_to_long(flag.strip(b"npuctf{").strip(b"}"))c = pow(m, e, n)print(c)print(pow(2, e, n))print(pow(4,原创 2020-07-27 16:49:44 · 720 阅读 · 0 评论 -
[watevrCTF 2019]Swedish RSA
encryptflag = bytearray(raw_input())flag = list(flag)length = len(flag)bits = 16## Prime for Finite Field.p = random_prime(2^bits-1, False, 2^(bits-1))file_out = open("downloads/polynomial_rsa.txt", "w")file_out.write("Prime: " + str(p) + "\n")原创 2020-07-26 19:43:26 · 753 阅读 · 0 评论 -
[AFCTF2018]One Secret, Two encryption
题目decrypt打开公钥进行解析得到的publickey1的e很大,想到低解密指数攻击。但是可惜的是解不出来。联系题目给的提示,“偷个懒”------可能用了两个相同的素数。于是求gcd(n1,n2),发现结果不为1,于是根据最大公因数进行n1,n2的分解,然后就可以得到flag了。n1=485029713816222346882648162308244024957913687679831265273520469868961396900863254522097669917030845原创 2020-07-26 16:18:48 · 796 阅读 · 0 评论 -
[NPUCTF2020]EzRSA
encryptfrom gmpy2 import lcm , powmod , invert , gcd , mpzfrom Crypto.Util.number import getPrimefrom sympy import nextprimefrom random import randintp = getPrime(1024)q = getPrime(1024)n = p * qgift = lcm(p - 1 , q - 1)e = 54722flag = b'NPUCTF{*原创 2020-07-26 13:29:44 · 1052 阅读 · 0 评论 -
[QCTF2018]Xman-RSA
题目decrypt打开加密脚本gqhb jbkl2 pbkhqw pt_kqpbdgqhb ht pbkhqw zqreahbpbkhqw urtd64adg ulwdt_wh_ezb(u): qdwzqe pew(u.dexhad('mdi'), 16) adg ezb_wh_ulwdt(e): u = mdi(e)[2:-1] u = '0' + u pg yde(u)%2 == 1 dytd u qdwzqe u.adxhad('mdi')adg jdw_r_kqpbd原创 2020-07-25 17:53:21 · 993 阅读 · 0 评论 -
[MRCTF2020]Easy_RSA
encryptimport sympyfrom gmpy2 import gcd, invertfrom random import randintfrom Crypto.Util.number import getPrime, isPrime, getRandomNBitInteger, bytes_to_long, long_to_bytesimport base64from zlib import *flag = b"MRCTF{XXXX}"base = 65537def gen原创 2020-07-20 23:29:56 · 1420 阅读 · 0 评论 -
rsa简单推导
c=me %n=>cd =(me %n)d =>cd %n=(me %n)d %n=me*d %n=mkφ(n)+1 %n=[(mkφ(n) %n)*(m%n)]%n=m%n=>m☰c d(mod n)(欧拉定理)原创 2020-07-19 01:33:29 · 162 阅读 · 0 评论 -
[De1CTF2019]babyrsa(比较综合的rsa类型题目)
encryptimport binasciifrom data import e1,e2,p,q1p,q1q,hint,flagn = [20129615352491765499340112943188317180548761597861300847305827141510465619670536844634558246439230371658836928103063432870245707180355907194284861510906071265352409579441048101084995原创 2020-07-18 19:43:06 · 3614 阅读 · 3 评论 -
[V&N2020 公开赛]Fast
考点1,费马小定理2,中国剩余定理加密脚本from Crypto.Util.number import *from secret import flagp = getPrime(1024)q = getPrime(1024)N = p * qg, r1, r2 = [getRandomRange(1, N) for _ in range(3)]g1 = pow(g, r1 * (p-1), N)g2 = pow(g, r2 * (q-1), N)def encrypt(m)原创 2020-07-18 13:23:26 · 722 阅读 · 1 评论 -
[MRCTF2020]babyRSA
题目加密脚本import sympyimport randomfrom gmpy2 import gcd, invertfrom Crypto.Util.number import getPrime, isPrime, getRandomNBitInteger, bytes_to_long, long_to_bytesfrom z3 import *flag = b"MRCTF{xxxx}"base = 65537def GCD(A): B = 1 for i in原创 2020-07-17 16:31:52 · 1490 阅读 · 0 评论 -
[WUSTCTF2020]dp_leaking_1s_very_d@angerous
题目分析模板题,dp泄露,直接用之前写过的代码,改一下数据即可.import gmpy2import rsaimport binasciip=0e=65537n = 15680834359857877495737569681518898068216674060930283109969649206824633719879251089881849623916633901520730510210143163428316854449298458656679999647115025238214原创 2020-07-17 15:14:52 · 470 阅读 · 0 评论 -
buu RSA & what(base64隐写术)
文件加密脚本from Crypto.Util.number import bytes_to_long, getPrimefrom random import randintfrom gmpy2 import powmodp = getPrime(2048)q = getPrime(2048)N = p*qPhi = (p-1)*(q-1)def get_enc_key(N,Phi): e = getPrime(N) if Phi % e == 0: re原创 2020-07-16 16:16:42 · 953 阅读 · 0 评论 -
[RoarCTF2019]RSA
题目分析这道题目其实有两种方法.一种十分简单,直接到线上进行分解.另一种方法则是常规解法.通过分析x,y的取值范围.枚举x,y从而得到x,y的解分析可得q与iroot(n/(x*y),2)的值相接近.从而可以得出p,q的值.decryptp=84286804568139093453973995920184755228498017995887966793307845395096856615166214726700629357176546313727059415113869577898原创 2020-07-14 22:45:31 · 2233 阅读 · 3 评论 -
[RoarCTF2019]babyRSA----------威尔逊定理
加密脚本import sympyimport randomdef myGetPrime(): A= getPrime(513) print(A) B=A-random.randint(1e3,1e5) print(B) return sympy.nextPrime((B!)%A)p=myGetPrime()#A1=218569634524616304373482784341914340000660767504190274938524635134698652原创 2020-07-11 01:23:18 · 1008 阅读 · 0 评论 -
[HDCTF2019]together(base64与unicode之间的转换以及共模攻击)
问题要点1,base 64与unicode之间的编码转换2,共模攻击分析拿到题目后首先提取公钥和发现模数n是相同的,猜测是共模攻击(n太大了,一般分解不出来)拿到flag1,flag2和看到这末尾的两个等号莫名兴奋,想到base64但是无奈发现解码失败于是想到base64是一种编码方式而不是一种加密算法所以将他转换成unicode编码,然后再转换成数结合共模攻击,flag就出来了.decryptimport base64f1="R3Noy6r3WLItytAmb原创 2020-07-09 22:36:22 · 798 阅读 · 0 评论 -
[BJDCTF2020]easyrsa
题目拿到压缩包得到加密脚本分析打开加密脚本from Crypto.Util.number import getPrime,bytes_to_longfrom sympy import Derivativefrom fractions import Fractionfrom secret import flagp=getPrime(1024)q=getPrime(1024)e=65537n=p*qz=Fraction(1,Derivative(arctan(p),p))-Fract原创 2020-07-08 20:42:29 · 1181 阅读 · 0 评论 -
[NCTF2019]babyRSA
问题拿到压缩包,解压后得到一个加密脚本脚本分析from Crypto.Util.number import *from flag import flagdef nextPrime(n): n += 2 if n & 1 else 1 while not isPrime(n): n += 2 return np = getPrime(1024)q = nextPrime(p)n = p * qe = 0x10001d = inverse原创 2020-07-08 20:25:53 · 3208 阅读 · 0 评论 -
[ACTF新生赛2020]crypto-rsa0
题目(我也不太明白为什么系统解压后会重复给我相同的文件)分析打开提示文件,文件告诉我们进行了压缩包进行了伪加密,于是用Winhex打开压缩包由于压缩包里有两个文件,只有一个进行了伪加密,于是我就把14 00 后面的都改成了0,懒得一个个去找.然后得到加密脚本后发现是签到题,于是就可以编写相应的解密脚本decryptp=901858806643420637724027716247673927138624017308867652629531516399096834702292284129912原创 2020-07-07 17:16:29 · 1627 阅读 · 2 评论 -
[BJDCTF2020]rsa_output
题目分析通过观察,第一个和第二个的n是一样的,不同的是e,因此判断可以通过共模攻击来decryptdecrypt脚本import gmpy2import binasciiimport rsaimport mathdef exgcd(m, n, x, y): if n == 0: x = 1 y = 0 return (m, x, y) a1 = b = 1 a = b1 = 0 c = m d =原创 2020-07-07 15:53:21 · 962 阅读 · 0 评论 -
[GWCTF 2019]BabyRSA 1
问题首先拿到压缩包,压缩包中给了我们两个文件一个是encrypt.py 这个文件是加密脚本另一个是secret里面有我们所需要的数据分析加密脚本打开脚本import hashlibimport sympyfrom Crypto.Util.number import *flag = 'GWHT{******}'secret = '******'assert(len(flag) == 38)half = len(flag) / 2flag1 = flag[:half]fla原创 2020-07-07 15:05:40 · 1831 阅读 · 1 评论 -
buu rsa1
这道题并没有直接给明钥,但是泄露了dp和dq.加密: c=me%n解密:m =cd%ndp=d%(p-1)dq=d%(q-1)整理上述条件后c≡me(mod n) ①m≡cd(mod n) ②dp≡d(mod (p-1)) ③dq≡d(mod (q-1)) ④由②式可以衍生出两个式子m1=cd%pm2=cd%q证明如下:m=cd+k*n=cd+kpq 分别同时对q,p取余得m1=cd%p⑤m2=cd%q⑥由式⑤可得m1+kp=cd代入⑥中可得kp≡(m1-m2) (原创 2020-06-14 00:51:16 · 1127 阅读 · 1 评论 -
buu crypto RSA
首先拿到这个压缩包,解压后发现有两个文件1,pub.key 这个文件可以获得明钥,通过公钥解析可以得到公钥(n,e)解析得到的模数是n(16进制)指数是e然后通过在线分解n可以得到p,q进而可以解出d 从而得到密钥(n,d)2,flag.enc 打开该文件获得明文m,再对m进行解密输出import rsan=86934482296048119190666062003494800588905656017203025617216654058378322103517e=65537d=81原创 2020-06-14 22:47:13 · 288 阅读 · 0 评论 -
buu RSA2
拿到压缩包,解压后得到一个txt文件文件中一共有3个条件,除明钥(n,e)外还多给了一个dp,似乎条件有点多余,但是发现题目所给的n的值过大,很难得到分解的两个素数.需要借助dp来求解素数p,然后求得素数q推导过程如下先列出所有的条件dp=d%(p-1)ed☰1 mod (p-1)(q-1)所以 k1(p-1)+dp=dk2(p-1)(q-1)+ed=1从而可以可以得到k2(p-1)(q-1)+ek1(p-1)+edp=1两边对p-1取余得edp%(p-1)=1所以edp=k(p-原创 2020-06-15 14:28:31 · 1329 阅读 · 0 评论 -
buu RSA3 共模攻击
拿到压缩包,解压得txt文件可以得到 c1,e1,c2,e2,n由此可得c1=me1%nc2=me2%n又因为gcd(e1,e2)=1所以 e1s1+e2s2=1 有且有唯一解结论为 m=(c1s1 *c2s2)%n证明如下(c1s1 *c2s2)%n=[(me1%n)s1 (me2%n)s2]%n=((me1%n)s1 %n(me2%n)s2 %n)%n=(me1*s1 %n *me2*s2 %n)%n=me1*s1+e2*s2 %n=m%n=m得到数学推导后就可以编程了impor原创 2020-06-15 21:06:26 · 1390 阅读 · 2 评论