ISCC 的一道 RSA 的题目
给的文件中只有 public.key 和 加密后的 message
1.用 openssl 将 public.key 中的 NE 解出来
openssl rsa -pubin -text -modulus -in ./public.key
Public-Key: (256 bit)
Modulus:
00:d9:9e:95:22:96:a6:d9:60:df:c2:50:4a:ba:54:
5b:94:42:d6:0a:7b:9e:93:0a:ff:45:1c:78:ec:55:
d5:55:eb
Exponent: 65537 (0x10001)
Modulus=D99E952296A6D960DFC2504ABA545B9442D60A7B9E930AFF451C78EC55D555EB
writing RSA key
-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhANmelSKWptlg38JQSrpUW5RC1gp7npMK
/0UceOxV1VXrAgMBAAE=
-----END PUBLIC KEY-----
N = 98432079271513130981267919056149161631892822707167177858831841699521774310891
E = 65537
2.分解 N
一般用此网站分解 N
p = 325045504186436346209877301320131277983
q = 302825536744096741518546212761194311477
之后用 M4x 老哥说的 libnum 和 gmpy2 两个库 得到 d
附上代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__Auther__ = 'Vangelis'
import libnum
import gmpy2
def RSA(message, d, n):
num = libnum.s2n(message);
print num;
m = pow(num, d, n)
print libnum.n2s(m)
n = 98432079271513130981267919056149161631892822707167177858831841699521774310891
e = 65537
p = 325045504186436346209877301320131277983
q = 302825536744096741518546212761194311477
assert n == p*q
d = gmpy2.invert(e, (p-1)*(q-1))
print "d = " + str(d)
print "n = " + str(n)
print "e = " + str(e)
print "p = " + str(p)
print "q = " + str(q)
f1 = open("encrypted.message1", "r")
f2 = open("encrypted.message2", "r")
f3 = open("encrypted.message3", "r")
m1 = f1.read()
m2 = f2.read()
m3 = f3.read()
RSA(m1, d, n)
RSA(m2, d, n)
RSA(m3, d, n)
--------------------------------------分割线-------------------------------------------
d = 1958518567680136759381316911808879057130620824462099039954817237801766103617
n = 98432079271513130981267919056149161631892822707167177858831841699521774310891
e = 65537
p = 325045504186436346209877301320131277983
q = 302825536744096741518546212761194311477
这样解密出来的是乱码的,M4x 说直接生成 key.pem,用 key.pem 解密 message
3.生成 key.pem
用 github 上 rsatool
python rsatool.py -f PEM -o key.pem -n 98432079271513130981267919056149161631892822707167177858831841699521774310891 -d 1958518567680136759381316911808879057130620824462099039954817237801766103617
得到 key.pem 文件
-----BEGIN RSA PRIVATE KEY-----
MIGpAgEAAiEA2Z6VIpam2WDfwlBKulRblELWCnuekwr/RRx47FXVVesCAwEAAQIgBFR7cyy8NScQ
TLV8RyjWiZtExJlPricT1rWUvA9SKkECEQD0iXyquoAja9wbWThcS/SfAhEA49ITsKPJVR+fseuN
fD2vNQIQJRmi32gyPq2DlGah5WbkswIQCzQuobY8VYJboS1bZOvHrQIQUMPjKA0asjAHRLzGnhwx
kw==
-----END RSA PRIVATE KEY-----
4.运用 openssl 解密
openssl rsautl -decrypt -in xxx.en -inkey key.pem -out xxx.de
最后附 M4x 的 RSA 的网址