首页 > 其他分享 >Buuctf刷题Crypto 5day

Buuctf刷题Crypto 5day

时间:2023-04-15 14:04:57浏览次数:52  
标签:phi Buuctf gmpy2 Crypto 5day flag import 素数 mod

1、[WUSTCTF2020]佛说:只能四天

先看题目,给了三个文件:

Buuctf刷题Crypto 5day_费马小定理

尊即寂修我劫修如婆愍闍嚤婆莊愍耨羅嚴是喼婆斯吶眾喼修迦慧迦嚩喼斯願嚤摩隸所迦
摩吽即塞願修咒莊波斯訶喃壽祗僧若即亦嘇蜜迦須色喼羅囉咒諦若陀喃慧愍夷羅波若劫
蜜斯哆咒塞隸蜜波哆咤慧聞亦吽念彌諸嘚嚴諦咒陀叻咤叻諦缽隸祗婆諦嚩阿兜宣囉吽色
缽吶諸劫婆咤咤喼愍尊寂色缽嘚闍兜阿婆若叻般壽聞彌即念若降宣空陀壽愍嚤亦喼寂僧
迦色莊壽吽哆尊僧喼喃壽嘚兜我空所吶般所即諸吽薩咤諸莊囉隸般咤色空咤亦喃亦色兜
哆嘇亦隸空闍修眾哆咒婆菩迦壽薩塞宣嚩缽寂夷摩所修囉菩阿伏嘚宣嚩薩塞菩波吶波菩
哆若慧愍蜜訶壽色咒兜摩缽摩諦劫諸陀即壽所波咤聞如訶摩壽宣咤彌即嚩蜜叻劫嘇缽所
摩闍壽波壽劫修訶如嚩嘇囉薩色嚤薩壽修闍夷闍是壽僧劫祗蜜嚴嚩我若空伏諦念降若心
吽咤隸嘚耨缽伏吽色寂喃喼吽壽夷若心眾祗喃慧嚴即聞空僧須夷嚴叻心願哆波隸塞吶心
須嘇摩咤壽嘚吶夷亦心亦喃若咒壽亦壽囑囑

Buuctf刷题Crypto 5day_2d_02

首先将佛语解码

Buuctf刷题Crypto 5day_费马小定理_03

得到核心价值观解码

Buuctf刷题Crypto 5day_3c_04

看到最后doyouknowfence,得知用栅栏解码:

Buuctf刷题Crypto 5day_3c_05

但发现不对劲,所以将后面提示删掉

Buuctf刷题Crypto 5day_费马小定理_06

一样的步骤,再用凯撒解密,根据提示,凯撒为什么叫凯撒,位移为3是凯撒

Buuctf刷题Crypto 5day_2d_07

位移为3的字符串为:O5RXIZRSGAZDA63ONFPWQYLPL54GSYLOM5PXQ2LBNZTV6ZDBL53W67I_

再用base32解密,得到wctf2020{ni_hao_xiang_xiang_da_wo},提交改为flag{ni_hao_xiang_xiang_da_wo}

2、[NCTF2019]childRSA

刚看题目,第一感觉就是什么玩意~,没有头绪,没办法,看代码就要戒急戒躁,心平气和,静~静~静~

首先看这个题,已知n、c、e,肯定最后是要求e,但是求e需要知道p和q,所以目前重点放到求p和q来,题目给了p和q的生成方法,即(p-1)和(q-1)是多个素数的乘积,但是如何求出p和q那?这里要引入费马小定理:

若b为一个素数,则对于任意整数a,有a(b-1) = 1 (mod b)

根据费马小定理,有a(b-1) - 1是b的倍数

拓展一下,又有ak*(b-1) - 1是b的倍数,系数k为正整数

回到题目中来,根据p和q的生成方式,我们知道(p-1)和(q-1)由前10000个素数中的若干个素数相乘得到

因此,前10000个素数的乘积记为∏,则∏肯定为(p-1)和(q-1)的倍数,令∏ = k*(p-1)

由费马小定理,有2-1 = ak*(p-1)-1是p的倍数

gcd(2-1, n) = p,得到p,但是直接计算2计算量会很大,所以再进一步优化

2∏ = 1 (mod p),即2∏ = 1 + k1*p
而2∏ % n = 2∏ - k2n = 2∏ - k2pq
两边同时% p,有2∏ % n = 2∏ (mod p)
所以同样有2∏ % n = 1 (mod p)

现在只用计算2 (mod n),模幂计算会比直接幂计算快很多

代码如下:

import gmpy2
from Crypto.Util.number import *
from Crypto.Util.number import isPrime, sieve_base as primes
e=0x10001
n=32849718197337581823002243717057659218502519004386996660885100592872201948834155543125924395614928962750579667346279456710633774501407292473006312537723894221717638059058796679686953564471994009285384798450493756900459225040360430847240975678450171551048783818642467506711424027848778367427338647282428667393241157151675410661015044633282064056800913282016363415202171926089293431012379261585078566301060173689328363696699811123592090204578098276704877408688525618732848817623879899628629300385790344366046641825507767709276622692835393219811283244303899850483748651722336996164724553364097066493953127153066970594638491950199605713033004684970381605908909693802373826516622872100822213645899846325022476318425889580091613323747640467299866189070780620292627043349618839126919699862580579994887507733838561768581933029077488033326056066378869170169389819542928899483936705521710423905128732013121538495096959944889076705471928490092476616709838980562233255542325528398956185421193665359897664110835645928646616337700617883946369110702443135980068553511927115723157704586595844927607636003501038871748639417378062348085980873502535098755568810971926925447913858894180171498580131088992227637341857123607600275137768132347158657063692388249513
c=26308018356739853895382240109968894175166731283702927002165268998773708335216338997058314157717147131083296551313334042509806229853341488461087009955203854253313827608275460592785607739091992591431080342664081962030557042784864074533380701014585315663218783130162376176094773010478159362434331787279303302718098735574605469803801873109982473258207444342330633191849040553550708886593340770753064322410889048135425025715982196600650740987076486540674090923181664281515197679745907830107684777248532278645343716263686014941081417914622724906314960249945105011301731247324601620886782967217339340393853616450077105125391982689986178342417223392217085276465471102737594719932347242482670320801063191869471318313514407997326350065187904154229557706351355052446027159972546737213451422978211055778164578782156428466626894026103053360431281644645515155471301826844754338802352846095293421718249819728205538534652212984831283642472071669494851823123552827380737798609829706225744376667082534026874483482483127491533474306552210039386256062116345785870668331513725792053302188276682550672663353937781055621860101624242216671635824311412793495965628876036344731733142759495348248970313655381407241457118743532311394697763283681852908564387282605279108
prd=1
#primes为前10000个素数的列表
for i in primes:
    prd=i*prd
p=gmpy2.gcd(gmpy2.powmod(2,prd,n)-1,n)
q=n//p
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
print(long_to_bytes(m))

运行得到NCTF{Th3r3_ar3_1ns3cure_RSA_m0duli_7hat_at_f1rst_gl4nce_appe4r_t0_be_s3cur3}

3、这是什么

密码学好多奇形怪状的编码,这个题就称之为JSfuck编码,解密工具

Buuctf刷题Crypto 5day_费马小定理_08

得到flag{a0448fd730b62c13ca80200c4529daa2}

4、[HDCTF2019]bbbbbbrsa

这是一个简单的RSA,我不明白题目为什么最后给了c的取值,我们不难看出c被base64加密,倒着输出然后解密,那这个题的难度就只是暴力破解e了。

import gmpy2
from base64 import b64encode as b32encode
from base64 import b64decode as b32decode
from Crypto.Util.number import *
import random
p = 177077389675257695042507998165006460849
n = 37421829509887796274897162249367329400988647145613325367337968063341372726061
# c='==gMzYDNzIjMxUTNyIzNzIjMyYTM4MDM0gTMwEjNzgTM2UTN4cjNwIjN2QzM5ADMwIDNyMTO4UzM2cTM5kDN2MTOyUTO5YDM0czM3MjM'
# print(str(c)[::-1])
# c1='MjM3Mzc0MDY5OTUyOTM2NDk5MTc2MzU4OTMyNDIwMDA5MzQ2NjIwNjc4NTU2MTgzNjEwMTg0MDM4MTYyMjIzNzIyNTUxMjIzNDYzMg=='
# print(b32decode(str(c1)))
c=2373740699529364991763589324200093466206785561836101840381622237225512234632q=n//p
phi=(p-1)*(q-1)
e=random.randint(50000,70000)
for e in range(50000,70000):
    if gmpy2.gcd(e,phi)==1:
        d=gmpy2.invert(e,phi)
        m=pow(c,d,n)
        m=str(long_to_bytes(m))
        if 'flag' in m:
            print(m)
            break

得出flag{rs4_1s_s1mpl3!#}

5、[MRCTF2020]古典密码知多少

Buuctf刷题Crypto 5day_费马小定理_09

翻译:

我想你能明白我的意思,

嗯…。也许你可以买一些围栏~都是大写字母!

一张图,标准银河字母+圣堂武士+猪圈变形


Buuctf刷题Crypto 5day_3c_10

Buuctf刷题Crypto 5day_3c_11

Buuctf刷题Crypto 5day_3c_12

在网上找密码表对照解出FGCPFLIRTUASYON, 上面也说了 买一些围栏,在栅栏解密呗

Buuctf刷题Crypto 5day_费马小定理_13

得到flag{CRYPTOFUN}

6、[NCTF2019]Keyboard

这个题比较有意思,首先观察题目:

Buuctf刷题Crypto 5day_2d_14

发现就是一些重复的字母,然后仔细观察为键盘第一行的字母,重复频率最高的字母为4,猜测可能为9宫格键盘,比如o为第一行的第9个数,重复了3次,对应于九宫格键盘9位置的第3个数,为y。依次类推,为

youaresosmartthatthisisjustapieceofcake

提交flag{youaresosmartthatthisisjustapieceofcake}即可



标签:phi,Buuctf,gmpy2,Crypto,5day,flag,import,素数,mod
From: https://blog.51cto.com/u_15778482/6192296

相关文章

  • jsencrypt与sm-crypto对url加解密处理
    1.jsencrypt公钥私钥随便找个网站生成(https://www.bejson.com/enc/rsa/)1.安装包:npmijsencrypt--save2.封装函数import{JSEncrypt}from'jsencrypt';//加密msg为需要加密的字符串,返回加密后的字符串exportfunctionsetEncrypt(msg){constjsencrypt=newJS......
  • windows环境下python3安装Crypto
    pycrypto、pycrytodome和crypto是一个东西,crypto在python上面的名字是pycrypto,它是一个第三方库,但是已经停止更新三年了,所以不建议安装这个库;这个时候pycryptodome就来了,它是pycrypto的延伸版本,用法和pycrypto是一模一样的;所以,我现在告诉大家一种解决方法--直接安装:pipinstallpy......
  • UVa 113 / POJ 2109 Power of Cryptography (使用double处理大整数&泰勒公式与误差分
    113-PowerofCryptographyTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=99&page=show_problem&problem=49http://poj.org/problem?id=2109题意:给出n和p,求出 ,但是p可以很大()如何存储p?不用大数可不可以?先看看double......
  • JSON.parse意外失败的问题(传入内容在校验网站上检查无误)(传入内容来自CryptoJS.AES.dec
    背景:由CryptoJS.AES.decrypt解码来的数据并进行toString(CryptoJS.enc.Utf8)之后,无法使用JSON.parse转换成json数据,但是使用在线校验工具认为格式正确。可能是由于解码后的字符串包含了一些特殊字符或者不可见字符,导致JSON.parse方法无法正确解析字符串。可以尝试使用console.log......
  • buuctf.crypto.NCTF2019]childRSA
    预期解法Pollard'sp-1method题目fromrandomimportchoicefromCrypto.Util.numberimportisPrime,sieve_baseasprimesfromflagimportflagdefgetPrime(bits):whileTrue:n=2whilen.bit_length()<bits:n*=cho......
  • buuctf.pwn.[OGeek2019]babyrop
    可以看出,没有开什么特别的保护什么是plt,gpt,自己回顾一下hex(elf.plt['puts']).plt.got:08048548FF25D49F0408jmpds:puts_ptrhex(elf.got['puts']).got:08049FD46CA00408puts_ptrddoffset__imp_puts;DATAXREF:pu......
  • [BUUCTF] findit
    a=['T','h','i','s','I','s','T','h','e','F','l','a','g','H','o','m','e�......
  • [BUUCTF]PWN-[OGeek2019]babyrop
      点进sub_80486BB   注意alarm()   注意buf是v1,输出数是a1,if嵌套strncmp frompwnimport*context(arch='i386',os='linux',log_level='debug')io=remote('node4.buuoj.cn',25522)#io=process('./babyrop'......
  • [BUUCTF]PWN-bjdctf_2020_babyrop
    注意本题需要用到ROPgadget安装命令:sudoapt-getinstallpython-capstonegitclonehttps://github.com/JonathanSalwan/ROPgadget.gitcdROPgadgetsudopythonsetup.pyinstall以下是相关使用命令:命令: ROPgadget--binary文件名--only"pop|ret"|greprdi命令: R......
  • buuctf.pwn.jarvisoj_level2
    这个题目,是缓冲区溢出检测一下Nocanaryfound:可以看出没有栈保护NOPIE:没有地址随机化然后分析题目这一次我在网上看到了不同的解法,但是基本思路是一致的主要看一下这个溢出ssize_tvulnerable_function(){charbuf[136];//[esp+0h][ebp-88h]BYREFsys......