rsa,m>n

阅读: 评论:0

rsa,m>n

rsa,m>n

可以加密,但是解密的时候最后要%n,所以解出来的m肯定小于n。所以true_m出不来了,但解出来的fake_m满足同余:

import uuid
import libnum
import gmpy2flag = "flag{" + str(uuid.uuid4()) + "}"
print(flag)
e = 65537
m = libnum.de())
p1 = ate_prime(128)
q1 = ate_prime(128)
p2 = ate_prime(128)
q2 = ate_prime(128)
print("p1=", p1)
print("q1=", q1)
print("p2=", p2)
print("q2=", q2)
n1 = p1 * q1
n2 = p2 * q2
print("n1=", n1)
print("n2=", n2)
c1 = pow(m, e, n1)
c2 = pow(m, e, n2)
print("c1=", c1)
print("c2=", c2)
p1 = 241529374856419543994843741620715478233
q1 = 329891612475502969315412700917758756573
p2 = 179415062328238613586720079938194290751
q2 = 281209161331996176661322999324485217597
n1 = 79678514931584446837886795964984740987618425126262080131520484181733127175509
n2 = 50453159207651801862952938090505477143503284591035016948403490994601319545347
c1 = 10906371165492800616190805676717306177005704888515733402096006986355132032250
c2 = 47055855052437161522184969745110429012879528443871661682592147046669796586664

思路1:用crt扩大N,然后正常解密。

m=libnum.solve_crt([c1,c2],[n1,n2])
phi=(p1-1)*(q1-1)*(p2-1)*(q2-1)
d=pow(e,-1,phi)
M=pow(m,d,n1*n2)
print(libnum.n2s(int(M)))

思路2:用crt合成fake_m1,fake_m2,取得true_m.


def rsa(p,q,c,e):n=p*qphi=(q-1)*(p-1)d=pow(e,-1,phi)m=pow(c,d,n)return m
m1=rsa(p1,q1,c1,e)
m2=rsa(p2,q2,c2,e)M=libnum.solve_crt([m1,m2],[n1,n2])
print(libnum.n2s(int(M)))b'flag{b204d8a4-0186-48c4-9c5f-2d02d267c326}'

本文发布于:2024-01-30 16:07:42,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170660206521216.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:rsa
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23