RSA理解-1.攻防世界:初识RSA

简介: RSA理解-1.攻防世界:初识RSA

1.攻防世界:初识RSA

下载附件后,我们看到的是这样一个界面

from Crypto.Util.number import bytes_to_long,inverse,getPrime
from flag import flag
#这里是将明文m转换为字符串flag
m = bytes_to_long(flag)
#生成两个1024的质数 p q
p = getPrime(1024)
q = getPrime(1024)
#两个质数相乘也就是N,这里用n表示而已
n = p*q
print(n)
#给出指数E,也就是公钥中的E
e = 65537
#计算密文c =m的e次方%n
c = pow(m,e,n)
#给出了pq qp的关系
pq = p*(q-1)
qp = q*(p-1)
#给出相关参数
print("c=",c)
print("n=",n)
print("pq=",pq)
print("qp=",qp)
'''
c= 8722269075970644434253339592758512788160408912707387632591552130175707843950684315083250494010055435391879036285103810263591951437829414438640307561645721347859659807138051841516634704123100270651976676182059252251162982609391666023674158274992400910869692389001622774140191223807887675081808561012755545464977015973615407965906513878979919700065923364884766974187303774330319143647840846354404070430118235352622445115153298578370521811697710289716188726587743282814946239856766713516166990341116198180068191759095913957606379780234116317390622824096667107736103270907349927467971817639795094030622157581511033950777
n= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074584935050067254029262890188260006596141011807724688556673520261743199388391094490191001701011230322653422314758778116196105077883955436582364267530633358016652912054880813710531145973799193443828969535902856467548523653920307742364119002349899553478815101092655897400295925170383678499125295006364960124859003
pq= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074488896197029704465200125337817646702009123916866455067019234171839614862660036737875747177391796376553159880972782837853473250804807544086701088829096838316550146794766718580877976153967582795248676367265069623900208276878140709691073369415161936376086988069213820933152601453587292943483693378833664901178324
qp= 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074475956379708898904933143429835002718457573266164923043251954374464149976302585916538814746811455883837138715445492053610047383292461097590195481556557381952895539341802954749542143253491617052100969586396996063822508764438280468492894012685918249843558593322831683872737943676955669923498182824352081785243246
'''

解密的代码

#导入模块
from Crypto.Util.number import bytes_to_long, long_to_bytes, inverse, getPrime
c = 8722269075970644434253339592758512788160408912707387632591552130175707843950684315083250494010055435391879036285103810263591951437829414438640307561645721347859659807138051841516634704123100270651976676182059252251162982609391666023674158274992400910869692389001622774140191223807887675081808561012755545464977015973615407965906513878979919700065923364884766974187303774330319143647840846354404070430118235352622445115153298578370521811697710289716188726587743282814946239856766713516166990341116198180068191759095913957606379780234116317390622824096667107736103270907349927467971817639795094030622157581511033950777
n = 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074584935050067254029262890188260006596141011807724688556673520261743199388391094490191001701011230322653422314758778116196105077883955436582364267530633358016652912054880813710531145973799193443828969535902856467548523653920307742364119002349899553478815101092655897400295925170383678499125295006364960124859003
pq = 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074488896197029704465200125337817646702009123916866455067019234171839614862660036737875747177391796376553159880972782837853473250804807544086701088829096838316550146794766718580877976153967582795248676367265069623900208276878140709691073369415161936376086988069213820933152601453587292943483693378833664901178324
qp = 10466186506773626671397261081802640650185744558208505628349249045496105597268556020207175016523119333667851114848452038431498926527983706092607207796937431312520131882751891731564121558651246025754915145600686076505962750195353958781726515647847167067621799990588328894365930423844435964506372428647802381074475956379708898904933143429835002718457573266164923043251954374464149976302585916538814746811455883837138715445492053610047383292461097590195481556557381952895539341802954749542143253491617052100969586396996063822508764438280468492894012685918249843558593322831683872737943676955669923498182824352081785243246
"""
这里求一下p和q的数值
首先我们知道n=pq pq=p*(q-1) qp = q*(p-1)          
都拆开就是pq=pq-p,直接换过去肯定不正确,我们将其中一个pq用n替换,那么结果就是p=n-pq
对应的我们也可以得到q
这个题我们还可以直接用工具计算,因为数字过大,所以工具较为吃力
"""
p = n - pq
q = n - qp
#这里的phi可以理解为上图中的T,也就是欧拉函数
phi = (p - 1) * (q - 1)
e = 65537
"""
inverse函数可以求出私钥中的D,通过求逆的方式的出私钥D
专门的求逆的函数
"""
d=inverse(e,phi)
#有了私钥D,就可以得出明文 m=密文(m)的d(私钥中的第一个数字)次方对n(两个质数的结果,也就是公私钥中的N)
m=pow(c,d,n)
#再将数字m转换为字符串就可以得到flag
flag=long_to_bytes(m)
print(flag)
相关文章
如何生成RSA,RSA2密钥
密钥生成或如何使用(创建应用):[url]https://openclub.alipay.com/read.php?tid=1606&fid=72[/url] 1.密钥生成工具下载:[url]https://docs.
1655 13
|
6月前
|
存储 安全 Go
加密必备技能:深入理解RSA与AES
加密必备技能:深入理解RSA与AES
267 0
|
算法 Linux 数据安全/隐私保护
RSA加密算法
RSA加密算法
244 0
RSA加密算法
|
算法 安全 数据安全/隐私保护
聊聊 RSA 算法
1977年,三位数学家 Rivest、Shamir和 Adleman 设计了一种算法,可以实现非对称加密。这种非对称加密算法(公钥密码算法)用他们三个人的名字命名,叫做 RSA 算法。
聊聊 RSA 算法
|
机器学习/深度学习 算法 安全
|
算法 数据安全/隐私保护
|
算法 数据安全/隐私保护 机器学习/深度学习
|
算法 数据安全/隐私保护
用libtommath实现RSA算法
RSA算法描述: 1) 选择两个大素数 p、q, 计算 n = p*q; 2) 产生 e, d 使:     e*d = 1mod(p-1)(q-1)     e 与 (p-1)(q-1) 互质 [公钥] e、n [私钥] d、n 3) 加密:     c = m^d mod n 4) 解密:     m = c^e mod n -------------------------------------------------------------------------------------- libtommath是一个大数算法库。
1112 0
|
算法 数据安全/隐私保护
下一篇
无影云桌面