首页 > 其他分享 >RSA刷题系列

RSA刷题系列

时间:2023-07-12 15:00:40浏览次数:23  
标签:phi 系列 libnum inv RSA flag pow print 刷题

1,共享素数

1)[闽盾杯 2021]decode

题目:

n1:
15228664629164509105936278301396170708905691970126305196584505186788860519598413718493859625462561931380632032431490419378905593909771649295663481782473029836321132574188559245931660756414915507930357509270674460219615256962333464689419869130366867401404262606367700782040693275068101244535880649261286041921882470460606034302142183971677715439862839410834231609821777031530457674591868138859358815039755085358568037032478394036448363183057305077227769673701227083943898736796552550712057417053897722979700329662099072959306298177351997084389916443815546425080826441671985030755256185725913397986385179516049927425591
n2:
28182418532443955655250943929828439725377604572088962537896240628709829618999901367131159759359513146864646169253348651905865895468151210748207509325666501438590382812326109260537618829438786609626137074778638549998280533912080708785604673270460635181275360847313985764185991865570533815651261638439461846512012164531330949433517277559149828806588070421852157781670188281908625986974579194819272643409859915715455134433970119584552350648013116998668938513347083566970423327936691885137812528912263666957628197241313496232397910546498542303925205356813548741679943691886217742767778075067797422624969714343428365022749
n3:
18355811159408154065817199279776805621878757240392366715869421799780946779485225342662736231980532326015283372375030686507311099745671828649419794838611580909610100636296701054995302819692794479292794716441442731393027118795245239019609474743841061251498233337758043553376098591254587406941205804917663153256036922860462415387926973551020540123742773938055950168965005226319984869124543783579240130888344231027912143592472823564266887957101575622993773291455143915263715932280728961208233983782906070719786115187115449430196335973764600533097718947377609348244073036523422892353195107093782201003551217830556519184839
e1:
65537
e2:
27751
e3:
65537
c1:
5368342382489380107251269030258282008067103595899117880173297169710980852124379736420135829984131832023988667774795223808420069001078159756328642298736759964890517323144475742861501409284299556459601222657540302786301791897975932176538612601162552795835603779910738886150925504885639254302406755008796950704938463132687940418772021406619622090999564746948113296328739593309200238996686945891130656599419832796482095787039339269564880847130379179831744694000940207887150388411084465949903406848727641093033681144598595895383689139227400553234701993087147186292040330589331703587405822925483701667354935313494938769206
c2:
21521672635651854919517759696514027081496995002884626306313384597771682621826437868933822942195279941318573525337109548152966094293276717095298929811895186384560362917891928656637913236676702009205642367801075592458101830488916914437754803979953027152373619293870115731171449223105986403604973873007338969000153480949617700626516389419935352576014084068271819009465242491467427642787306345049280205827574043586767133396458785487959251540831856187380154825027964867977651727983254127239427622549059938701125498520279503972702883327594442747467858234391945790597844344295786118320620376681461727686876948563884520137741
c3:
13940747781246179701167820858098775936269078279837839169409057305686612176371099274767269714494905207551971162649902129137425806839867713157472497469542260664882313041602553845621113546259276402534229231780532278276697961222319054833980226978574905974878218905613341365260453461080117407529132948986104191917111000811731784483944945364091757083949827612260904757837644538366763161154611658652020868326985526984718638276184626634240096213703958275241215175054246685206226179114590838833694648062135027841593419815101363262701960507235056752424778384286627997500871204804629047307688466887868894491042058198480775705486

初步思路:

分别给了 3个n,e,c, 共模攻击,广播攻击 一 一排除, 似乎就有三个对应的明文,

最近 看到一篇 博客,说道,给了多组n和c,不是广播攻击,可试试 n不互素

此处恰好为之

exp:

import libnum

e1 = 65537
e2 = 27751
e3 = 65537
n1 = 15228664629164509105936278301396170708905691970126305196584505186788860519598413718493859625462561931380632032431490419378905593909771649295663481782473029836321132574188559245931660756414915507930357509270674460219615256962333464689419869130366867401404262606367700782040693275068101244535880649261286041921882470460606034302142183971677715439862839410834231609821777031530457674591868138859358815039755085358568037032478394036448363183057305077227769673701227083943898736796552550712057417053897722979700329662099072959306298177351997084389916443815546425080826441671985030755256185725913397986385179516049927425591
n2 = 28182418532443955655250943929828439725377604572088962537896240628709829618999901367131159759359513146864646169253348651905865895468151210748207509325666501438590382812326109260537618829438786609626137074778638549998280533912080708785604673270460635181275360847313985764185991865570533815651261638439461846512012164531330949433517277559149828806588070421852157781670188281908625986974579194819272643409859915715455134433970119584552350648013116998668938513347083566970423327936691885137812528912263666957628197241313496232397910546498542303925205356813548741679943691886217742767778075067797422624969714343428365022749
n3 = 18355811159408154065817199279776805621878757240392366715869421799780946779485225342662736231980532326015283372375030686507311099745671828649419794838611580909610100636296701054995302819692794479292794716441442731393027118795245239019609474743841061251498233337758043553376098591254587406941205804917663153256036922860462415387926973551020540123742773938055950168965005226319984869124543783579240130888344231027912143592472823564266887957101575622993773291455143915263715932280728961208233983782906070719786115187115449430196335973764600533097718947377609348244073036523422892353195107093782201003551217830556519184839
c1 = 5368342382489380107251269030258282008067103595899117880173297169710980852124379736420135829984131832023988667774795223808420069001078159756328642298736759964890517323144475742861501409284299556459601222657540302786301791897975932176538612601162552795835603779910738886150925504885639254302406755008796950704938463132687940418772021406619622090999564746948113296328739593309200238996686945891130656599419832796482095787039339269564880847130379179831744694000940207887150388411084465949903406848727641093033681144598595895383689139227400553234701993087147186292040330589331703587405822925483701667354935313494938769206
c2 = 21521672635651854919517759696514027081496995002884626306313384597771682621826437868933822942195279941318573525337109548152966094293276717095298929811895186384560362917891928656637913236676702009205642367801075592458101830488916914437754803979953027152373619293870115731171449223105986403604973873007338969000153480949617700626516389419935352576014084068271819009465242491467427642787306345049280205827574043586767133396458785487959251540831856187380154825027964867977651727983254127239427622549059938701125498520279503972702883327594442747467858234391945790597844344295786118320620376681461727686876948563884520137741
c3 = 13940747781246179701167820858098775936269078279837839169409057305686612176371099274767269714494905207551971162649902129137425806839867713157472497469542260664882313041602553845621113546259276402534229231780532278276697961222319054833980226978574905974878218905613341365260453461080117407529132948986104191917111000811731784483944945364091757083949827612260904757837644538366763161154611658652020868326985526984718638276184626634240096213703958275241215175054246685206226179114590838833694648062135027841593419815101363262701960507235056752424778384286627997500871204804629047307688466887868894491042058198480775705486

p1 = libnum.gcd(n1,n2)
p2 = libnum.gcd(n2,n3)
q1 = n1//p1
q2 = n2 //p1
q3 = n3// p2
phi_1 = (p1-1)*(q1-1)
phi_2 = (p1-1)*(q2-1)
phi_3 = (p2-1)*(q3-1)
d1 = libnum.invmod(e1,phi_1)
d2 = libnum.invmod(e2,phi_2)
d3 = libnum.invmod(e3,phi_3)
print(libnum.n2s(pow(c1,d1,n1)))
print(libnum.n2s(pow(c2,d2,n2)))
print(libnum.n2s(pow(c3,d3,n3)))

# b"hahaha, you've got the flag didn't you !the front part is :flag{G00d_w4"
# b"hahaha, you've got the flag didn't you !the middle part is :y_tO_cR"
# b"hahaha, you've got the flag didn't you !the last part is :4ck_RS4}"
# flag{G00d_w4y_tO_cR4ck_RS4}

 

 

 

 

2,rabin算法

1)[HGAME 2023 week2]Rabin

题目源码:

from Crypto.Util.number import *

def gen_key(kbits):
    while True:
        p = getPrime(kbits)
        q = getPrime(kbits)
        if p % 4 == 3 and q % 4== 3:
            break
    return p, q

p ,q = gen_key(256)
flag =  open("flag", 'rb').read()
pt = bytes_to_long(flag)
c = pow(pt, 2, p*q)

print(f"p={p}\nq={q}")
print(f"c={hex(c)[2:]}")

"""
p=65428327184555679690730137432886407240184329534772421373193521144693375074983
q=98570810268705084987524975482323456006480531917292601799256241458681800554123
c=4e072f435cbffbd3520a283b3944ac988b98fb19e723d1bd02ad7e58d9f01b26d622edea5ee538b2f603d5bf785b0427de27ad5c76c656dbd9435d3a4a7cf556
"""
c = pow(pt,2,p*q)    =>  e = 2   常规解法试一遍,不行   ,  e和phi 不互素了  , 可 e= 2 ,太小 ,e和phi不互素的解法不可行,此时,看向题目 -- Rabin  ,据此解题   rabin算法 特征:e=2 直接代入脚本即可(没找到其公式推导的过程) 用到了欧拉准则,二次剩余定理

exp:

from gmpy2 import *
import libnum

p=65428327184555679690730137432886407240184329534772421373193521144693375074983
q=98570810268705084987524975482323456006480531917292601799256241458681800554123
c=4086661358212073245252744496322167481491672871949606958127237667510352936336492238168574196919178461270299415887662858793221972137767350873928701793072470
n = p*q
inv_p = invert(p, q)
inv_q = invert(q, p)
mp = pow(c, (p+1)//4, p)
mq = pow(c, (q+1)//4, q)

a = (inv_p * p * mq + inv_q * q * mp) % n
b = n - int(a)
c = (inv_p * p * mq - inv_q * q * mp) % n
d = n - int(c)

#因为rabin 加密有四种结果,全部列出。
aa=[a,b,c,d]
for i in aa:
    print(i)
    print(libnum.n2s(int(i)))
    
# b"hgame{That'5_s0_3asy_to_s@lve_r@bin}"

 

标签:phi,系列,libnum,inv,RSA,flag,pow,print,刷题
From: https://www.cnblogs.com/Wbuildings/p/RSA.html

相关文章

  • 【NestJS系列】从Nest CLI开始入门
    初识NestJSNest是一个渐进的Node.js框架,它可以在TypeScript和JavaScript(ES6、ES7、ES8)之上构建高效、可伸缩的企业级服务器端应用程序。Nest基于TypeScript编写并且结合了OOP(面向对象编程),FP(函数式编程)和FRP(函数式响应编程)的相关理念。在设计上的很多灵感来自于......
  • ASP.NET CORE 框架揭秘读书笔记系列——命令行程序的创建(一)
    一、dotnet--info查看本机开发环境dotnet--info 会显示本机安装的SDK版本、运行时环境、运行时版本二、利用命令行创建.NET项目我们不仅可以利用脚手架模版创建各种类型的应用项目,还可以为项目添加各种组件和配置。换句话说IDE能完成的各项工作全部都可以通过脚手架命令行......
  • (全网唯一)分数阶熵系列-matlab
    基于Matlab实现了多个分数阶熵。值得注意的是,下面......
  • LINUX系列-grep篇
    一grep完整语法结构grep[options][pattern]file命令参数匹配模式文件数据常用参数总结-i--忽略大小写-n--列出所有匹配的行,并显示行号-l--只列出符合条件的文件名称-L--列出不包含匹配项的文件名称-r--递归搜索-x--匹配整行-w--匹配......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-6-元素定位大法-下篇
    1.简介上一篇主要是讲解我们日常工作中在使用Playwright进行元素定位的一些比较常用的定位方法的理论基础知识以及在什么情况下推荐使用。今天这一篇讲解和分享一下,在日常中很少用到或者很少见的定位,但是遇到了我们也要会,俗话说:手里有粮心里不慌。2.阴影定位-ShadowDOM在做web......
  • ABP说搞就搞系列——模块热插拔实现(二)
    Orchard是一个开源的、基于ASP.NETMVC的CMS(内容管理系统)平台,它支持模块化和主题化,允许用户方便地扩展和定制其功能。Orchard的模块热插拔主要依赖于以下几个关键部分:模块文件结构:每个模块都被放在一个单独的文件夹中,并且有一个预定义的文件和文件夹结构,这样Orchard就可以知道......
  • 算法细节系列(1):Java swap
    算法细节系列(1):Javaswap问题在C++中,swap算法可以用指针来实现,因此在Java中,如果采用如下代码来对两个数字进行交换时,也不会影响两个对象的值。publicclassTestSwap{publicstaticvoidmain(String[]args){inta=2;intb=3;System.out.prin......
  • 挑战程序竞赛系列(74):4.3强连通分量分解(1)
    挑战程序竞赛系列(74):4.3强连通分量分解(1)传送门:POJ2186:PopularCows题意:每头牛都想成为牛群中的红人。给定N头牛的牛群和M个有序对(A,B)。(A,B)表示牛A认为牛B是红人。该关系具有传递性,所以如果A认为B是红人,B认为C是红人,则A认为C是红人。注意:给定的有序对中可能包含(A,B)和(B,C......
  • 挑战程序竞赛系列(70):4.7后缀数组(2)
    挑战程序竞赛系列(70):4.7后缀数组(2)传送门:POJ1509:GlassBeads题意:ThedescriptionofthenecklaceisastringA=a1a2…amspecifyingsizesoftheparticularbeads,wherethelastcharacteramisconsideredtoprecedecharactera1incircularfashion.Thedisjoin......
  • 安捷伦SureSelectXT 系列靶向捕获panel信息文件
    weburl:https://earray.chem.agilent.com/suredesign/index.htm登录后下载......