CRYPTO 6.22 WP

一、sign_in

题目:

用flag{}包裹
来算一卦
密文:解随睽丰巽随蒙升坎随损升大过震谦损蛊豫升大畜旅解睽谦未济随蛊颐蒙归妹升节困噬嗑升大畜未济困晋否未济随蛊屯蒙豫晋履升涣豫大畜鼎噬嗑贲丰咸未济旅颐未济归妹大畜同人困噬嗑颐旅遁

1.根据题目推断是周易64卦加密,将汉字转换为二进制,拼接在一起后得到

 RmlndXJlXzB1dF95MHVfaGF2ZV9UaGVfbDAwa19vZl9SaWNoZXM=

推断是base64,使用在线网站解密得到flag

flag{Figure_0ut_y0u_have_The_l00k_of_Riches}

2.

s='解随睽丰巽随蒙升坎随损升大过震谦损蛊豫升大畜旅解睽谦未济随蛊颐蒙归妹升节困噬嗑升大畜未济困晋否未济随蛊屯蒙豫晋履升涣豫大畜鼎噬嗑贲丰咸未济旅颐未济归妹大畜同人困噬嗑颐旅遁'
dic={'坤': '000000', '剥': '000001', '比': '000010', '观': '000011', '豫': '000100', '晋': '000101', '萃': '000110', '否': '000111', '谦': '001000', '艮': '001001', '蹇': '001010', '渐': '001011', '小过': '001100', '旅': '001101', '咸': '001110', '遁': '001111', '师': '010000', '蒙': '010001', '坎': '010010', '涣': '010011', '解': '010100', '未济': '010101', '困': '010110', '讼': '010111', '升': '011000', '蛊': '011001', '井': '011010', '巽': '011011', '恒': '011100', '鼎': '011101', '大过': '011110', '姤': '011111', '复': '100000', '颐': '100001', '屯': '100010', '益': '100011', '震': '100100', '噬嗑': '100101', '随': '100110', '无妄': '100111', '明夷': '101000', '贲': '101001', '既济': '101010', '家人': '101011', '丰': '101100', '离': '101101', '革': '101110', '同人': '101111', '临': '110000', '损': '110001', '节': '110010', '中孚': '110011', '归妹': '110100', '睽': '110101', '兑': '110110', '履': '110111', '泰': '111000', '大畜': '111001', '需': '111010', '小畜': '111011', '大壮': '111100', '大有': '111101', '夬': '111110', '乾': '111111'}

cc=""
i=0
while True:
    if i >=len(s):
        break
    try:
        cc+=dic[s[i]]
    except:
        cc+=dic[s[i] + s[i + 1]]
        i+=1
    i+=1
x=""
end=cc
for i in range(0,len(end),8):
    ins=end[i:i+8]
    x+=chr(int(ins,2))

print(x)
# RmlndXJlXzB1dF95MHVfaGF2ZV9UaGVfbDAwa19vZl9SaWNoZXM=

二、sign_in_2

题目:

1.题目给了一张png图片,并且提示010editor

将图片拖到010editor中,显示CRC计算错误,所以是图片宽高被修改,而CRC没有修改

使用python脚本爆破宽高,修改宽高,得到一张新图片,是一张二维码,扫码后得到flag

flag{Ju3T_hAv3_Fun!!!}

2.

import binascii
import struct
import sys

file = input('图片地址:')
fr = open(file,'rb').read()
data = bytearray(fr[0x0c:0x1d])
crc32key = int.from_bytes(fr[0x1d:0x21], byteorder='big')

n = 4095
for w in range(n):
    width = bytearray(struct.pack('>i', w))
    for h in range(n):
        height = bytearray(struct.pack('>i', h))
        for x in range(4):
            data[x+4] = width[x]
            data[x+8] = height[x]
        crc32result = binascii.crc32(data) & 0xffffffff
        if crc32result == crc32key:
            print(width,height)
            newpic = bytearray(fr)
            for x in range(4):
                newpic[x+16] = width[x]
                newpic[x+20] = height[x]
            fw = open(file+'.png','wb')
            fw.write(newpic)
            fw.close
            sys.exit()

三、暗度成仓

题目:

import libnum
flag = "flag{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}"

m = libnum.s2n(flag)
p = libnum.generate_prime(1024)
q = libnum.generate_prime(1024)
n = p*q
e = 7
c = pow(m,e,n)
M = ((m >> 128) << 128)

print("n=",n)
print("c=",c)
print("((m>>60)<<60)=",M)

"""
n= 11641876404223838031044053075068004412888254845126129959298317769039828661300847167590011078814384924146516243252335723927638602939336263670042754305134563529327623177562227567597098228748291527396137372544178817944076777012844620273115528633812841474576583855479630838450419496432264580104739131121660696741175941183938902719828134419252600529120752637902383122280475009870901377771340004347070328239515854039699514158942488552277056103324966365423691867674519370636154863977044307434572410760411174788443461173043525488719696375984232809515863439041325084894711826506679213938429647434166916283697460579620360510417
c= 630126267900096065199675723365572749784659170093253019252252289224258559435031835900231978967843180392268864676843237096005638676956674492832090514028654003812791866213739842806237503559558228137720131847274829524789805267984332148421078737260511845315323054929207231043106617499022447112702501840384673819128829533832457667852759787845041600338155971800991351964453510824357833112218654032548113106677
((m>>60)<<60)= 2511413510841768941799598030693692780493324549090323726336
"""

1.e比较小,M没有使用价值,是低加密指数攻击

2.

import gmpy2
import binascii


n= 11641876404223838031044053075068004412888254845126129959298317769039828661300847167590011078814384924146516243252335723927638602939336263670042754305134563529327623177562227567597098228748291527396137372544178817944076777012844620273115528633812841474576583855479630838450419496432264580104739131121660696741175941183938902719828134419252600529120752637902383122280475009870901377771340004347070328239515854039699514158942488552277056103324966365423691867674519370636154863977044307434572410760411174788443461173043525488719696375984232809515863439041325084894711826506679213938429647434166916283697460579620360510417
c= 630126267900096065199675723365572749784659170093253019252252289224258559435031835900231978967843180392268864676843237096005638676956674492832090514028654003812791866213739842806237503559558228137720131847274829524789805267984332148421078737260511845315323054929207231043106617499022447112702501840384673819128829533832457667852759787845041600338155971800991351964453510824357833112218654032548113106677
e = 7


def low_exponent_attack(e, n, c):
    i = 0
    while True:
        if gmpy2.iroot(c+i*n,e)[1] == True :   # gmpy2.iroot(x,n) x开n次根,返回结果和布尔值
            m = gmpy2.iroot((c+i*n), e)[0]
            break
        i += 1
    print(binascii.unhexlify(hex(m)[2:]))


low_exponent_attack(e, n, c)

flag{easy_rsa_with_math}

五、ez_RSA

题目:

from Crypto.Util.number import *

flag = 'flag{************}'

n1 = 17469717225290839083886059660020772742752375617155018341273892047793372744698410821267578073551552960524963665346449077758814068409306299412121230890087243994934069424664432952179673373660893792217836744393273253287054105453944786491111611018381399413055687027276149402575363263508501697421923860136883159522462486705426786971861204711000357141974615132983241706819782064010684249986143619837319638462611244019548080721568640157757452792099219878124106822180849990920724795130168065140032361525100465973966351865345187438555526309456171790787512162222789257642406653299062020398590522979322440558869763617971453838719
n2 = 26003912920102200626674342598145088129242820638824288661394208334288121066586487824985483915912517168372493192861480006105302583771770728732856519603501910380886078536543990958186081526731614103590837760509828365323919632719381267900922037358547541657031543146649339524322620742094140727038642854222912828245926421695701845318877839619205619442516015608195328935459679721941573194042411797135071760645847904306959431926926019519673538902724356189146612439668424002323682236113831302090436737186448211852381301723292350822048243490872739727586950330041508367718922118212985327100110454116948665292834214136538859224239
e = 65537
m = bytes_to_long(flag.encode())
c = pow(m, e, n1)
c = pow(c, e, n2)

print("n1 = %d" % n1)
print("n2 = %d" % n2)
print("c = %d" % c)


""""""
c = 11057883693890837338174128348933052959786731674341613869367586389254581134077700610057794325023315850008627176352238740298325291834687337419279898907670619950922544933327181200926995298850433647383924732342920115209742179573692089499577464749662959143551579540225455975207003441088069286946693999743580682375867917614077862266832016811708458208309180853612015014815074281750947018418802159591276175839910706356088278622349017258609321802811977781923918556805378593196318887889506937072890312829618526207657892903899022311929750871095724484100777147412831411048910532329541086455636749690305225945392315234589313487863
""""""

# 将十六进制表示转换为原始字符串
flag = binascii.unhexlify(flag_hex)

print("Flag:", flag)

1.一个e,两个n,猜测是共享素数,题目中加密了两次,依次进行解密

import gmpy2
import libnum

n1 = 17469717225290839083886059660020772742752375617155018341273892047793372744698410821267578073551552960524963665346449077758814068409306299412121230890087243994934069424664432952179673373660893792217836744393273253287054105453944786491111611018381399413055687027276149402575363263508501697421923860136883159522462486705426786971861204711000357141974615132983241706819782064010684249986143619837319638462611244019548080721568640157757452792099219878124106822180849990920724795130168065140032361525100465973966351865345187438555526309456171790787512162222789257642406653299062020398590522979322440558869763617971453838719
n2 = 26003912920102200626674342598145088129242820638824288661394208334288121066586487824985483915912517168372493192861480006105302583771770728732856519603501910380886078536543990958186081526731614103590837760509828365323919632719381267900922037358547541657031543146649339524322620742094140727038642854222912828245926421695701845318877839619205619442516015608195328935459679721941573194042411797135071760645847904306959431926926019519673538902724356189146612439668424002323682236113831302090436737186448211852381301723292350822048243490872739727586950330041508367718922118212985327100110454116948665292834214136538859224239
e = 65537
c = 11057883693890837338174128348933052959786731674341613869367586389254581134077700610057794325023315850008627176352238740298325291834687337419279898907670619950922544933327181200926995298850433647383924732342920115209742179573692089499577464749662959143551579540225455975207003441088069286946693999743580682375867917614077862266832016811708458208309180853612015014815074281750947018418802159591276175839910706356088278622349017258609321802811977781923918556805378593196318887889506937072890312829618526207657892903899022311929750871095724484100777147412831411048910532329541086455636749690305225945392315234589313487863

p = gmpy2.gcd(n1, n2)
q2 = n2//p
q1 = n1//p
phi_1 = (p-1)*(q1-1)
phi_2 = (p-1)*(q2-1)
d1= gmpy2.invert(e, phi_1)
d2 = gmpy2.invert(e, phi_2)
m = gmpy2.powmod(c, d2, n2)
m1 = gmpy2.powmod(m, d1, n1)
print(m1)
print(libnum.n2s(int(m1)))

flag{ddb3ba15-2dd9-11ef-8bfd-10a51d4c1d59}

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值