美文网首页
easyRSA4:特殊e值

easyRSA4:特殊e值

作者: 好好睡觉鸭 | 来源:发表于2019-12-31 15:31 被阅读0次

e=1和e=2时,解法会变

e=1

N=0x180be86dc898a3c3a710e52b31de460f8f350610bf63e6b2203c08fddad44601d96eb454a34dab7684589bc32b19eb27cffff8c07179e349ddb62898ae896f8c681796052ae1598bd41f35491175c9b60ae2260d0d4ebac05b4b6f2677a7609c2fe6194fe7b63841cec632e3a2f55d0cb09df08eacea34394ad473577dea5131552b0b30efac31c59087bfe603d2b13bed7d14967bfd489157aa01b14b4e1bd08d9b92ec0c319aeb8fedd535c56770aac95247d116d59cae2f99c3b51f43093fd39c10f93830c1ece75ee37e5fcdc5b174052eccadcadeda2f1b3a4a87184041d5c1a6a0b2eeaa3c3a1227bc27e130e67ac397b375ffe7c873e9b1c649812edcd
e=0x1
c=0x4963654354467b66616c6c735f61706172745f736f5f656173696c795f616e645f7265617373656d626c65645f736f5f63727564656c797d

当e=1时,明文等于密文,可直接解密:

c=0x4963654354467b66616c6c735f61706172745f736f5f656173696c795f616e645f7265617373656d626c65645f736f5f63727564656c797d
print c[2:].decode('hex')

e=2

又被称为Rabin算法

例题如下:
链接自提:https://pan.baidu.com/s/10wdL6722bVtkQqKWW-mSUQ

解出pubkey.pem中的n,e值,分解n(之前的文章有写方法)后,带入下面的脚本即可:

import rsa
import gmpy2

n = 'C2636AE5C3D8E43FFB97AB09028F1AAC6C0BF6CD3D70EBCA281BFFE97FBE30DD'
n = int(n,16)
e = 2
p = 319576316814478949870590164193048041239
q = 275127860351348928173285174381581152299
fn = (p-1) * (q-1)

# 路径根据实际情况替换
with open('hardRSA/flag.enc','rb') as f1:  
    re = f1.read()
x = re.encode('hex')
x = int(x,16)

inv_p = gmpy2.invert(p,q)
inv_q = gmpy2.invert(q,p)

mp = pow(x,(p+1)/4,p)
mq = pow(x,(q+1)/4,q)

a = (inv_p * p * mq + inv_q * q * mp) % n
b = n - int(a)
c = (inv_p * p * mq - inv_q * q * mp) % n
d = n - int(c)

for i in (a,b,c,d):
    s = '%x' % i
    if len(s) % 2 != 0:
        s = '0' + s
    print s.decode('hex')

解出:


flag

相关文章

网友评论

      本文标题:easyRSA4:特殊e值

      本文链接:https://www.haomeiwen.com/subject/ilyeoctx.html