RSAROLL实验吧:

http://www.shiyanbar.com/ctf/1918
RSAROLL:
RSA roll!roll!roll!
flag格式:flag{xxx}
解题链接: http://ctf5.shiyanbar.com/crypto/RSAROLL.txt
{920139713,19}
 
704796792
752211152
274704164
18414022
368270835
483295235
263072905
459788476
483295235
459788476
663551792
475206804
459788476
428313374
475206804
459788476
425392137
704796792
458265677
341524652
483295235
534149509
425392137
428313374
425392137
341524652
458265677
263072905
483295235
828509797
341524652
425392137
475206804
428313374
483295235
475206804
459788476
306220148


解:
参考:http://blog.csdn.net/c465869935/article/details/52266867
      http://www.52pojie.cn/forum.php?mod=viewthread&tid=490769
 
算法描述:


(1)选择一对不同的、足够大的素数p,q。
(2)计算n=pq。
(3)计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。
(4)找一个与f(n)互质的数e,且1 (5)计算d,使得de≡1 mod f(n)。这个公式也可以表达为(d*e-1)% f(n)=0
     这里要解释一下,≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。
     显而易见,不管f(n)取什么值,符号 右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。
     这就需要计算出d的值,让这个同余等式能够成立。
(6)公钥KU=(e,n),私钥KR=(d,n)。
(7)加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,
     则加密过程为:C≡M^e(mod n)。
(8)解密过程为:M≡C^d(mod n)。




同余:数论中的重要概念。给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,
记作a≡b(mod m)。对模m同余是整数的一个等价关系




有了上面的RSA基础可以知道RSA中的
p: 第一个大素数
q: 第二个大素数 
模数n: n = p*q 
f(n):  (p-1)*(q-1) 
公钥指数e: 与 f(n)互质, 且 1 < e < f(n) 
私钥指数d: 满足e * d ≡ 1 (mod f(n))
公钥 = {n, e},一般公开
私钥 = {d, e}




本题分析:然后结合附件第一行 {920139713,19}和题目要求,可以推测出给的是公钥{n, e}然后
下面的一些行都是用私钥{d, e}加密过后的密文c,我们要求出明文m。
我们就从“RSA的安全性依赖于大整数分解”这句话入手吧
那就分解这个模数吧。python代码如下
结果如下:
请输入要分解的质数: 920139713
p=18443 ,q=49891
欧拉函数 
f(n) = (p-1)(q-1)= 18442 × 49890= 920071380 
一旦有了这个数,已知e=19,求d,就可以根据 920071380*x + 19*d = 1 
通过现成的代码得出私钥了看图吧。

最后提交的flag{13212je2ue28fy71w8u87y31r78eu1e2}

#---------------------------------------------------------------
#分解大整数
import math
def moder(n):
	base=2
	while base 			return d#避免科学计数法最后转int失去精度
		k += 1
#------------------------------------------------------
#求明文
def Ming(c,d,n):
	return pow(c,d,n)
#---------------------------------------------------------------------------------------
if __name__=='__main__':
	n=int(input('请输入要分解的质数: '))#920139713
	d =getDkey(19, moder(n))
	print('私钥为: %d'%d)
	c=[704796792,752211152,274704164,18414022,368270835,483295235,263072905,459788476,483295235,459788476,663551792,475206804,
	   459788476,428313374,475206804,459788476,425392137,704796792,458265677,341524652,483295235,534149509,425392137,428313374,
	   425392137,341524652,458265677,263072905,483295235,828509797,341524652,425392137,475206804,428313374,483295235,475206804,459788476,306220148]
	L=[]
	for x in c:
		L.append(Ming(x,d,n))
	print(L)#明文ascii表
	for x in L:
		print(chr(x),end='')






	

RSAROLL实验吧:_第1张图片


你可能感兴趣的:(RSAROLL实验吧:)