简单 RSA

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

http://factordb.com/

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

https://github.com/ius/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

https://www.cnblogs.com/taoshihan/p/6340854.html

最后附 M4x 的 RSA 的网址

http://www.cnblogs.com/WangAoBo/p/7513811.html

猜你喜欢

转载自www.cnblogs.com/Vangelis/p/9111579.html
RSA