首页 > 其他分享 >RSA公钥文件解密密文

RSA公钥文件解密密文

时间:2024-10-26 23:20:40浏览次数:1  
标签:文件 公钥 rsa 解密 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))

参考:

RSA公钥文件解密密文的原理分析 - 知乎 (zhihu.com)

什么是 .pem 文件?全面指南 - SSL Dragon

标签:文件,公钥,rsa,解密,RSA,密文
From: https://www.cnblogs.com/arui-li/p/18505339

相关文章

  • The 2023 CCPC (Qinhuangdao) Onsite / The 2nd Universal Cup. Stage 9: Qinhuangdao
    B.YetAnotherSubsequenceProblem题意:按照给定方式生成01串,求本质不同子序列个数,生成方式可以理解为从\((0,0)\)沿折线走到\((A,B)\),若在折线上方或在折线上,就往右走(\(0\)),否则往上走(\(1\))。套路地设\(f_{i,0/1}\)前\(i\)个数以\(0/1\)结尾的不同子序列个数,显然可......
  • 第九届中国大学生程序设计竞赛 深圳站(CCPC 2023 Shenzhen Site)/ The 2nd Universal Cu
    D.BotBrothers题意:有一棵\(n\)个点的树,\(m\)个叶子,编号为\(1\simm\)。两人在树上博弈,均从根出发,轮流行动,每次走向一个当前所在节点的子节点,如果在叶子就不移动。最终如果两人所在叶子编号一个是另一个\(+1\)(\(\pmodm\)意义下),则\(+1\)的一方获胜。观察到先手不可能......
  • DA-CLIP-universal-image-restoration代码详解
    DA-CLIP-universal-image-restoration代码详解创建模型model=create_model(opt)device=model.devicecreat_model最终指向ConditionalUNet类,类的主要结构如下:classConditionalUNet(nn.Module):def__init__(self,in_nc,out_nc,nf,ch_mult=[1,......
  • RSA算法详解及相关数学原理解析
    RSA算法详解及相关数学原理解析前言‍为了记录自己学习密码学的过程,也是为了便于个人应付相关课程的考核,故写此博客。本博客总结了怎么用C++手搓一个RSA算法,以及补补欠缺的一些数学知识和可能欠缺的一些其他算法的实现。参考了其他人的相关博客,用便于我自己理解的话和方式和......
  • RSA非对称加密解密
    一、关于RSARSA是一种非对称加密算法,广泛应用于数据加密和数字签名领域。RSA算法是由罗纳德·李维斯特(RonRivest)、阿迪·萨莫尔(AdiShamir)和伦纳德·阿德曼(LeonardAdleman)在1977年提出的。该算法基于一个十分简单的数论事实:将两个大素数相乘得到它们的乘积很容......
  • 椭圆曲线密码学(ECC)和RSA对比
    椭圆曲线密码学(ECC)和RSA都是非对称加密算法,它们都使用公钥和私钥来实现加密和解密。不过,它们在数学原理和实现方式上存在一些差异:数学基础:RSA:基于大整数因数分解的难题,其安全性依赖于将一个大整数分解为两个大质数的乘积的难度。ECC:基于椭圆曲线离散对数问题(ECDLP),其安全......
  • SM2 - 公钥加密算法
    符号A,B:使用公钥密码系统的两个用户。\(a,b\):\(F_q\)中的元素,他们定义\(F_q\)上的一条椭圆曲线\(E\)。\(d_B\):用户B的私钥。\(E⁡(F_q)\):\(F_q\)上椭圆曲线\(E\)的所有有理点(包括无穷远点\(O\))组成的集合。\(F_q\):包含\(q\)个元素的有限域。\(G\):椭圆曲线的一个基点,其阶为......
  • (环境篇日志-CVPR2024 ) Physical 3D Adversarial Attacks against Monocular Depth E
    题目:Physical3DAdversarialAttacksagainstMonocularDepthEstimationinAutonomousDriving作者:JunhaoZheng,ChenhaoLin*,JiahaoSun,ZhengyuZhao,QianLi,ChaoShen*单位:Xi’anJiaotongUniversity收录:CVPR2024论文:[Physical3DAdversarialAttacks......
  • 钥匙对对碰:RSA加密解密(数字版&字符串版)JAVA实现
    钥匙对对碰:RSA加密解密(数字版)RSA加密的原理其实很简单,就是你有两把钥匙,一把叫公钥,一把叫私钥。这两把钥匙都有很特别的性质:用公钥加锁(加密)之后,只能用对应的私钥来解锁(解密),反过来也一样。我们来一步步看看它是怎么实现的。1.找两把钥匙的“材料”要做出公钥和私钥,首先需......
  • python实现rsa加密
    模拟效果:用户注册/登陆成功,返回自己的公钥,注册时候生成的私钥和公钥入库。下次进来的时候,加解密是动态的,也就是每个用户都不一样fromcryptography.hazmat.backendsimportdefault_backendfromcryptography.hazmat.primitives.asymmetricimportrsa,paddingfromcryptograp......