首页 > 其他分享 >使用已知的p、q生成私钥解rsa密文的方法

使用已知的p、q生成私钥解rsa密文的方法

时间:2025-01-01 08:59:25浏览次数:1  
标签:私钥 base64 rsa private pem key 密文

昨天渗透赛的一道题,研究了一下颇有感触,给大家分享一下(2024年的最后一天还要坐牢呜呜呜)

先用rsatool根据已知的p、q生成公钥

python rsatool.py -f DER -o key.der -p 31764044218067306492147889531461768510318119973238219147743625781223517377940974553025619071173628007991575510570365772185728567874710285810316184852553098753128108078975486635418847058797903708712720921754985829347790065080083720032152368134209675749929875336343905922553986957365581428234650288535216460326756576870072581658391409039992017661511831846885941769553385318452234212849064725733948770687309835172939447056526911787218396603271670163178681907015237200091850112165224511738788059683289680749377500422958532725487208309848648092125981780476161201616645007489243158529515899301932222796981293281482590413681 -q 19935965463251204093790728630387918548913200711797328676820417414861331435109809773835504522004547179742451417443447941411851982452178390931131018648260880134788113098629170784876904104322308416089636533044499374973277839771616505181221794837479001656285339681656874034743331472071702858650617822101028852441234915319854953097530971129078751008161174490025795476490498225822900160824277065484345528878744325480894129738333972010830499621263685185404636669845444451217075393389824619014562344105122537381743633355312869522701477652030663877906141024174678002699020634123988360384365275976070300277866252980082349473657

然后使用Win64OpenSSL转公钥文件为pem

openssl rsa -inform DER -outform PEM -in key.der -out mykey.pem

获得pem后直接打开,把私钥复制下来

然后使用以下Python脚本解密

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
import base64

# 假设你的私钥PEM文件名为'private_key.pem'
pem_private_key = b"""
-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----
"""

# 从PEM文件加载私钥
private_key = serialization.load_pem_private_key(
    pem_private_key,
    password=None,  # 如果你的私钥是加密的,这里需要提供密码
    backend=default_backend()
)

# 假设你已经有了加密后的密文(这里用base64编码的字符串表示)
ciphertext_b64 = "..."  # 将这里的"..."替换为你的密文(base64编码)

# 将base64编码的密文解码为二进制数据
ciphertext = base64.b64decode(ciphertext_b64)

# 使用私钥解密密文
# 注意:你需要确保解密时使用的填充方式与加密时使用的填充方式相同
try:
    plaintext = private_key.decrypt(
        ciphertext,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    #print(f'Decrypted message: {plaintext.decode("utf-8")}')
    decoded_bytes = base64.b64decode(plaintext.decode("utf-8").encode('utf-8'))
    decoded_str = decoded_bytes.decode('utf-8')
    print(decoded_str)
except Exception as e:
    print(f'An error occurred during decryption: {e}')

运行后可以得到解密后的密文
image

标签:私钥,base64,rsa,private,pem,key,密文
From: https://www.cnblogs.com/ljnljn/p/18645214

相关文章

  • 【密码学】RSA的攻击方法总结
    总结一下收集到的RSA的所有攻击方法。一、RSA的前世今生RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(RonRivest)、阿迪·萨莫尔(AdiShamir)和伦纳德·阿德曼(LeonardAdleman)一起提出的。RSA就是他们三人姓氏开头字......
  • UE4.27, 揣摩源码, 序列化 (三) FLinkerLoad, FLinkerSave
    3.  FLinkerLoad,FLinkerSave分别是UObject的反序列化和序列化的内核3.0.UPackage与UObjectUObject因为涉及与其他UObject的复杂引用关系,如果我们客制化地单独正反序列化每一个UObject,我们会在反序列化的时候惊觉这是繁琐而不可能的。为了满足UObject......
  • [BUUCTF]RSA
    [BUUCTF]RSA分析得到一段文字:在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17求解出d作为flga提交解题第一想法是python脚本,网上找到一个importgmpy2p=473398607161q=4511491e=17d=int(gmpy2.invert(e,(p-1)*(q-1)))print(d)得到flag{125631357777......
  • VS2022 + OpenSSL 3.0实现DES、AES、RSA加密
    ​一、DES加密#include<openssl/des.h>#include<cstdio>#include<iostream>#include<cstdlib>#include<iomanip>#defineMAX_LINE1024#pragmawarning(disable:4996)usingnamespacestd;signedmain(){ const_DES_cblockke......
  • Eclipse Jgit 不支持高版本 openssh 私钥的结局方法 (jsch 报错 invalid privatekey
    替换jsch依赖<dependency><groupId>org.eclipse.jgit</groupId><artifactId>org.eclipse.jgit.ssh.jsch</artifactId><version>7.1.0.202411261347-r</version><ex......
  • [CISCN 2021初赛]rsa
    [CISCN2021初赛]rsa源代码:fromflagimporttext,flagimportmd5fromCrypto.Util.numberimportlong_to_bytes,bytes_to_long,getPrimeassertmd5.new(text).hexdigest()==flag[6:-1]msg1=text[:xx]msg2=text[xx:yy]msg3=text[yy:]msg1=bytes_to_long......
  • 四种多Agent范式哪种最好?用于对话任务解决的多代理大型语言模型 Multi-Agent Large La
    原文地址摘要在单个大型语言模型多年来主宰人工智能领域的时代,多智能体系统在对话任务解决中崭露头角。此前的研究虽已展现出其在推理任务和创新尝试方面的潜力,但对于其在对话范式方面的局限以及个体智能体的影响,却缺乏分析。多智能体讨论在不同复杂程度任务中的表现怎......
  • 渗透测试-前后端加密分析之RSA+AES
    本文是高级前端加解密与验签实战的第8篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA与AES加密来爆破登录。由于RSA加解密有长度限制,以及解密速度等问题,所以如https等协议都是用非对称加密对称加密的密钥,然后用对称加密算法来加密数据。本关卡就是用RS......
  • 渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)
    本文是高级前端加解密与验签实战的第6篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA加密来爆破登录。分析这里的代码跟上文的类似,但是加密的公钥是通过请求服务端获取的http://127.0.0.1:8787/crypto/js/rsa/generator由于密钥是服务端生......
  • 密码学-RSA的学习
    密码学-RSA的学习前文1.历史1977年,三位数学家RonRivest、AdiShamir和LeonardAdleman设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法2.加密与解密mod就是进行取模运算,通俗来说就是求余数这个d...对d不是很解了3.密钥的生成通......