RSA公钥文件解密密文
RSA公钥文件解密密文
做题遇到两个从未见过的文件:
flag.enc pub.txt
.enc文件名扩展名的作用是表明一个文件以某种方式进行了ENC编码或ENC加密(ENC)。在许多情况下,.enc作为第二个扩展名出现(例如,文件名.txt.enc*)。这通常意味着文件的内容已经被替换为加密形式的内容。当然,这使得该文件在原来的关联中无法读取。一个ENC文件不能以任何方式被读取,而且是没有意义的,除非它先被解密。*
该flag文件可能是密文,pub即publickey公钥文件
分析
1.RSA密钥生成
- 选择两个质数p,q
- 计算n=p*q
- 欧拉公式φ(n)=(p-1)(q-1)
- 选择一个整数e,使得1<e<φ(n),且e和φ(n)互质
- 计算e关于φ(n)的模逆元d,即ed≡1(mod φ(n))
即可得到公钥pk=(e,n),私钥sk(d,n)
2.RSA加密和解密
- 给定明文M,加密过程如下:
得到密文C
- 给定密文C,解密过程如下:
得到明文M
RSA公钥主要有两个信息:模数(modulus)和指数(exponent),也就是我们所说的 n 和 e 。只要有了这两个信息,我们便可以生成公钥,然后使用 rsa 库对数据进行加密
通过脚本
import rsa
key = rsa.PublicKey(modulus, exponent)
print key
但其实得到的是一个pem文件
何为pem
在计算机安全和密码学方面,PEM(隐私增强邮件)文件是一种包含密码信息的常用容器格式。 它可能包含公共证书或整个 SSL 链(私钥和公钥、根证书和中间证书以及最终用户证书)。
PEM这一名称最初来源于电子邮件加密标准,但现在已被更广泛地用于各种数据类型。 它以 base64 编码,具有特定的结构和标头,可显示其包含的数据类型。
PEM 文件的扩展名有 .pem、.crt、.cer 或 .key。它们有一个或多个项目,这些项目通常由标记分隔,如X.509 证书的”—–BEGIN CERTIFICATE—–” 和”—–END CERTIFICATE—–“,或私钥的”—–BEGIN PRIVATE KEY—–” 和”—–END PRIVATE KEY—–“。
可通过该网址http://www.hiencode.com/pub_asys.html得到e,n;当然,还有其他很多方法……
接着,再对n进行分解https://factordb.com/
得到p,q;带入工具,得到d
到这里,已知如下参数:
p = 275127860351348928173285174381581152299
q = 319576316814478949870590164193048041239
N = 87924348264132406875276140514499937145050893665602592992418171647042491658461
e = 65537
通过脚本得出结果
import rsa
import gmpy2
c = 1854183526100811878807183372982532818560316522978821358738967769534081571682
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
e = 65537
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
fn = (p - 1) * (q - 1)
d = int(gmpy2.invert(e, fn))
key = rsa.PrivateKey(n, e, d, q, p)
with open(r'D:\\pythonlearning\\pythonProject\\b\\flag.enc', 'rb') as f:
f = f.read()
print(rsa.decrypt(f, key))
参考: