Crypto

BUUCTF

一眼就解密

一眼就解密题目
=可能是Base家族解密,随波逐流
一眼就解密题解

MD5

在这里插入图片描述

在这里插入图片描述
压缩包解压后,32位16进制,128位2进制,hash值求明文
方法一:md5 Hash求原文在线 https://www.cmd5.com/
有时候,ctf比赛,有时候是局域网环境,无法访问互联网,这时就需要其他方法。(待解决)
在这里插入图片描述
按理说,md5的加密不可逆。但是,数据库大呀!90万亿条,hash值—明文,给出hash,查表就完事了!

Url编码

在这里插入图片描述
在这里插入图片描述
url解密 随波逐流
在这里插入图片描述

看我回旋踢

在这里插入图片描述

在这里插入图片描述
Rot13 替换式算法 每个字母用后面的13个字符替换
在这里插入图片描述
Rot13 Rot18都试一下

摩丝

在这里插入图片描述
在这里插入图片描述
… .-… — …- . -.-- — …-

摩丝密码,随波逐流就好了~
在这里插入图片描述

摩丝密码

password

在这里插入图片描述
在这里插入图片描述
{}里面长度是10,zs19900315 刚好10位,一尝试,过啦!

变异凯撒

在这里插入图片描述
随波逐流
在这里插入图片描述
在这里插入图片描述

Quoted-printable

特殊加解密算法
在这里插入图片描述
=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6
在这里插入图片描述

篱笆墙的影子

在这里插入图片描述
在这里插入图片描述

栅格fence解密
在这里插入图片描述

Rabbit

在这里插入图片描述
在这里插入图片描述
U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

在线Rabbit解密 https://www.sojson.com/encrypt_rabbit.html
在这里插入图片描述
Rabbit解密暂时没有找到离线解码的方法

RSA

在这里插入图片描述
题目:
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flag提交
在这里插入图片描述

1.已知p,q,e,求d

#pip install gmpy2
import gmpy2
from Crypto.Util.number import long_to_bytes
 
p = 473398607161
q = 4511491

n=p*q
fai_n = (p - 1) * (q - 1)

#e私钥
e = 17
#d公钥
d = gmpy2.invert(e, fai_n)
print("d=",d)

#c密文-->m明文
c=***
m = pow(c, d, n)
print(m)
print(long_to_bytes(m))

#m明文-->c密文
m=***
c = pow(m, e, n)
print(c)
print(long_to_bytes(c))

RSA做个总结,python实现,常用的

丢失的MD5

在这里插入图片描述
附件源代码

import hashlib   
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print des

在这里插入图片描述
运行后,提示print 没有加括号,可能是python2和python3语法的区别。我用的是python3 😂
在这里插入图片描述
运行后,提示String类型在hash运算前,需要指定编码方式。
update里面的每一部分字符串都.encode(‘utf-8’)
这一段也是学习到了
在这里插入图片描述e9032994dabac08080091151380478a2
Bingo!

Alice与Bob

在这里插入图片描述
98554799767
素数分解,一个整数拆分成两个素数相乘
方法一:随波逐流~
在这里插入图片描述
101999966233——>md5
在这里插入图片描述
方法二:Python

#因数分解
n = int(input("请输入一个数:"))
print(n,'=',end="")
i = 2
while i <= n:
    if i == n:
        print(i, end="")
        break
    elif n % i == 0:
        print(i, end="*")
        n = n / i
    else:
        i += 1

#求一个数n的hash  md5值
import hashlib
n = md5_hash = hashlib.md5(b'101999966233')
print(md5_hash.hexdigest())

大帝的密码武器

在这里插入图片描述
下载附件,文件无后缀,可能是zip文件,使用010 Editor 查看,文件头符合zip要求.
修改后缀为zip,然后打开,发现有两个文件
在这里插入图片描述
文件名乱码,但是不影响,第一个是题目,第二个是密文。凯撒大帝~
在这里插入图片描述
FRPHEVGL
frphevgl
偏移量13,得到明文;ComeChina同样的,偏移13,查看结果
在这里插入图片描述
在这里插入图片描述
PbzrPuvan

常见文件头,文件尾

JPEG (jpg),   文件头:FFD8FF       文件尾:FF D9               
PNG (png),    文件头:89504E47       文件尾:AE 42 60 82
GIF (gif),   文件头:47494638       文件尾:00 3B
ZIP Archive (zip), 文件头:504B0304       文件尾:50 4B

TIFF (tif),   文件头:49492A00                      文件尾:
Windows Bitmap (bmp),   文件头:424D                         文件尾:
CAD (dwg),   文件头:41433130                      文件尾:
Adobe Photoshop (psd), 文件头:38425053                      文件尾:
Rich Text Format (rtf), 文件头:7B5C727466                     文件尾:
XML (xml), 文件头:3C3F786D6C                     文件尾:
HTML (html), 文件头:68746D6C3E
Email [thorough only] (eml), 文件头:44656C69766572792D646174653A
Outlook Express (dbx), 文件头:CFAD12FEC5FD746F
Outlook (pst), 文件头:2142444E
MS Word/Excel (xls.or.doc), 文件头:D0CF11E0
MS Access (mdb), 文件头:5374616E64617264204A
WordPerfect (wpd), 文件头:FF575043
Adobe Acrobat (pdf), 文件头:255044462D312E
Quicken (qdf), 文件头:AC9EBD8F
Windows Password (pwl), 文件头:E3828596

RAR Archive (rar), 文件头:52617221
Wave (wav), 文件头:57415645
AVI (avi), 文件头:41564920
Real Audio (ram), 文件头:2E7261FD
Real Media (rm), 文件头:2E524D46
MPEG (mpg), 文件头:000001BA
MPEG (mpg), 文件头:000001B3
Quicktime (mov), 文件头:6D6F6F76
Windows Media (asf), 文件头:3026B2758E66CF11
MIDI (mid), 文件头:4D546864

rsarsa

在这里插入图片描述

# 已知p,q,e,c,求m
# c密文-->m明文

# pip install gmpy2
# pip install pycryptodome


import gmpy2
from Crypto.Util.number import long_to_bytes

p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

n=p*q
fai_n = (p - 1) * (q - 1)

d = gmpy2.invert(e, fai_n)

m = pow(c, d, n)
print(m)
print(long_to_bytes(m))

5577446633554466577768879988
b’\x12\x05\x8eC\xd9\xe0\xc2%Y\xc1\x97t’

Windows系统密码

在这里插入图片描述
在这里插入图片描述


Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::

md5 在线解码,逐个尝试
在这里插入图片描述
good-luck

信息化时代的步伐

在这里插入图片描述
在这里插入图片描述

606046152623600817831216121621196386

没有头绪,随波逐流,一键解码试一下
在这里插入图片描述
中文电报码解码

凯撒?替换?呵呵!

在这里插入图片描述

MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}

quipquip 暴力替换算法,替换算法,知道其中部分密文明文对应关系
quipqiup 是 Edwin Olson 开发的一款快速且自动化的密码求解器。它可以解决报纸上常见的简单替换密码,包括 cryptoquips(其中保留了单词边界)和 patristocrats (inwhi chwor dboun darie saren t) 等谜题。
quipquip替换算法在线解密
在这里插入图片描述

萌萌哒的八戒

萌萌哒的八戒原来曾经是猪村的村长,从远古时期,猪村就有一种神秘的代码。请从附件中找出代码,看看萌萌哒的猪八戒到底想说啥 注意:得到的 flag 请包上 flag{} 提交
在这里插入图片描述
猪圈密码,可能是
猪圈密码
猪圈密码解密
猪圈密码解密
whenthepigwanttoeat

权限获得第一步

你猜这是什么东西,记得破解后把其中的密码给我。答案为非常规形式。 注意:得到的 flag 请包上 flag{} 提交

32位16进制,128个2进制位,hash md5

Administrator:500:806EDC27AA52E314AAD3B435B51404EE:F4AD50F57683D4260DFD48AA351A17A8:::

md5解密收费版
md5解密免费版
在这里插入图片描述
3617656

RSA1

p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

在这里插入图片描述

已知p,q,dp,dq,c求m明文

# 已知p,q,dp,dq,c求m明文

# pip install gmpy2
# pip install pycryptodome
import gmpy2
from Crypto.Util.number import long_to_bytes

p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469 
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929 
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041 
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

I = gmpy2.invert(q,p)
mp = pow(c,dp,p)
mq = pow(c,dq,q)               #求幂取模运算

m = (((mp-mq)*I)%p)*q+mq       #求明文公式

print(m)
print(hex(m))          #转为十六进制
print(long_to_bytes(m)) #长整型数转换为字节串

传统知识+古典密码

小明某一天收到一封密信,信中写了几个不同的年份
辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。
信的背面还写有“+甲子”,请解出这段密文。
key值:CTF{XXX}

先用天干地支解密
在这里插入图片描述
60年一甲子,一个循环,不用加
XZSDMFLZ–>xzsdmflz 小写看着熟悉一点

然后使用栅格解密–>xmzfsldz
在这里插入图片描述

再用caesar
在这里插入图片描述
不理解~怎么知道使用这两种的?而且结果shuangyu没有一点提示信息,
结果还要转成大写SHUANGYU

世上无难事

以下是某国现任总统外发的一段指令,经过一种奇异的加密方式,毫无规律,看来只能分析了。请将这段语句还原成通顺语句,并从中找到key作为答案提交,答案是32位,包含小写字母。 注意:得到的 flag 请包上 flag{} 提交

VIZZB IFIUOJBWO NVXAP OBC XZZ UKHVN IFIUOJBWO HB XVIXW XAW VXFI X QIXN VBD KQ IFIUOJBWO WBKAH NBWXO VBD XJBCN NKG QLKEIU DI XUI VIUI DKNV QNCWIANQ XN DXPIMKIZW VKHV QEVBBZ KA XUZKAHNBA FKUHKAKX XAW DI VXFI HBN QNCWIANQ NCAKAH KA MUBG XZZ XEUBQQ XGIUKEX MUBG PKAWIUHXUNIA NVUBCHV 12NV HUXWI XAW DI XUI SCQN QB HZXW NVXN XZZ EBCZW SBKA CQ NBWXO XAW DI DXAN NB NVXAP DXPIMKIZW MBU JIKAH QCEV XA BCNQNXAWKAH VBQN HKFI OBCUQIZFIQ X JKH UBCAW BM XLLZXCQI XAW NVI PIO KQ 640I11012805M211J0XJ24MM02X1IW09

无头绪,随波逐流一下;

在这里插入图片描述
根据词频,来试一下,找到啦!刚好是32位

640E11012805F211B0AB24FF02A1ED09
转小写
640e11012805f211b0ab24ff02a1ed09

Unencode

密文

89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]

一键解码
在这里插入图片描述

flag{dsdasdsa99877LLLKK}

old-fashion

Os drnuzearyuwn, y jtkjzoztzoes douwlr oj y ilzwex eq lsdexosa kn pwodw tsozj eq ufyoszlbz yrl rlufydlx pozw douwlrzlbz, ydderxosa ze y rlatfyr jnjzli; mjy gfbmw vla xy wbfnsy symmyew (mjy vrwm qrvvrf), hlbew rd symmyew, mebhsymw rd symmyew, vbomgeyw rd mjy lxrzy, lfk wr dremj. Mjy eyqybzye kyqbhjyew mjy myom xa hyedrevbfn lf bfzyewy wgxwmbmgmbrf. Wr mjy dsln bw f1_2jyf-k3_jg1-vb-vl_l

密文长,使用随波逐流,quipquip 词频分析
在这里插入图片描述

[AFCTF2018]Morse

-…/.----/-…/-…/-…/…–/–…/…-/-…/-…/–…/-…/…–/.----/–…/…–/…—/–…/–…/…-/…/…-./–…/…–/…–/-----/…/…-./…–/…–/…–/…-/…–/…/–…/----./–…/-…

在这里插入图片描述

61666374667B317327745F73305F333435797D 提交失败

进制转个字符试试
在这里插入图片描述

afctf{1s’t_s0_345y}
flag{1s’t_s0_345y}

RSA3

已知c1,n,e1,c2,e2,求m

共模攻击

c1=
22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n=
22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1=
11187289
c2=
18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2=
9647291

共模攻击即用两个及以上的公钥(n,e)来加密同一条信息m
已知有密文:
c1 = pow(m, e1, n)
c2 = pow(m, e2, n)
条件:
当e1,e2互质,则有gcd(e1,e2)=1
根据扩展欧几里德算法,对于不完全为 0 的整数 a,b,gcd(a,b)表示 a,b 的最大公约数。那么一定存在整数 x,y 使得 gcd(a,b)=ax+by
所以得到:
e1s1+e2s2 = 1
因为e1和e2为正整数,所以s1、s2皆为整数,但是一正一负,此时假设s1为正数,s2为负数

推导这里需要用到两条幂运算的性质:

(a * b) % p = (a % p * b % p) % p
a ^ b % p = ((a % p) ^ b) % p

因为c1 = m^e1%n,c2 = me2%n,需要证明m=(c1s1*c2^s2)%n

代入可得:

(c1s1*c2s2)%n = ((me1%n)s1(me2%n)s2)%n

                         =((m^e1%n)^s1*(m^e2%n)^s2)%n

                         =((m^e1)^s1%n*(m^e2)^s2%n)%n   //消掉%n

                         =((m^e1)^s1*(m^e2)^s2)%n

                         =((m^(e1*s1)*(m^(e2*s2))%n   //幂的乘方,底数不变,指数相乘

                         =(m^(e1*s1+e2*s2))%n   //同底数幂相乘,底数不变,指数相加

又因为m<n,所以(c1s1 ✖c2s2)%n=m%n=m
共模攻击讲解

#已知c1,n,e1,c2,e2,求m
from gmpy2 import invert
from Crypto.Util.number import long_to_bytes
def gongmo(n, c1, c2, e1, e2):
    def egcd(a, b):
        if b == 0:
            return a, 0
        else:
            x, y = egcd(b, a % b)
            return y, x - (a // b) * y
    s = egcd(e1, e2)
    s1 = s[0]
    s2 = s[1]

    # 求模反元素
    if s1 < 0:
        s1 = - s1
        c1 = invert(c1, n)
    elif s2 < 0:
        s2 = - s2
        c2 = invert(c2, n)
    m = pow(c1, s1, n) * pow(c2, s2, n) % n
    return m
c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1=11187289
c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2=9647291
m = gongmo(n, c1, c2, e1, e2)
print(m)
print(hex(m))
print(long_to_bytes(m))

13040004482819947212936436796507286940525898188874967465457845309271472287032383337801279101
0x666c61677b34396439313037376131616263623134663161396435343663383062653965667d
b’flag{49d91077a1abcb14f1a9d546c80be9ef}’

RSA2

已知e,n,dp,c,求m

e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751

#已知e,n,c,dp,求m
import gmpy2
from Crypto.Util.number import long_to_bytes
e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
 
for i in range(1,e):                   
    if(dp*e-1)%i == 0:
        if n%(((dp*e-1)//i)+1) == 0:   
            p=((dp*e-1)//i)+1
            q=n//(((dp*e-1)//i)+1)
            phi=(q-1)*(p-1)            
            d=invert(e,phi)         
            m=pow(c,d,n)
           
print(m)                              
print(hex(m))
print(long_to_bytes(m)) 
           

3670434958110785066911905751469631231338751225710158680692616521935747246580688484040488309932916523151997
0x666c61677b776f775f6c65616b696e675f64705f627265616b735f7273613f5f39383932343734333530327d
b’flag{wow_leaking_dp_breaks_rsa?_98924743502}’

还原大师

我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB???08???51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。 注意:得到的 flag 请包上 flag{} 提交

思路:明文三个?从A到Z,暴力循环,生成MD5和原文比较,如果相同。输出原文,密文,终止;

#明文部分已知,hash密文部分已知;穷举明文,和密文比较
import hashlib

#print hashlib.md5(s).hexdigest().upper()
k = 'TASC?O3RJMV?WDJKX?ZM'                    #要还原的明文
for i in range(26):
    temp1 = k.replace('?',str(chr(65+i)),1)
    for j in range(26):
        temp2 = temp1.replace('?',chr(65+j),1)
        for n in range(26):
            temp3 = temp2.replace('?',chr(65+n),1)
            s = hashlib.md5(temp3.encode('utf8')).hexdigest().upper()#注意大小写
            if s[:4] == 'E903':
                print (temp3)
                print (s)

TASCJO3RJMVKWDJKXLZM
E9032994DABAC08080091151380478A2

异性相吸

最近出现了一个奇葩观点,说性别都不一样,怎么能谈恋爱?为了证明这个观点错误,请大家证明异性是相吸的。 注意:得到的 flag 请包上 flag{} 提交

key.txt asadsasdasdasdasdasdasdasdasdasdqwesqf
密文.txt ἇ̀Ј唒ဃ塔屋䩘卖剄䐃堂ن䝔嘅均ቄ䩝ᬔ

转换成二进制,异或运算
0+0=0
0+1=1
1+1=0

010打开两个txt文件
在这里插入图片描述

然后,在python代码中,将两串16进制字符串异或,结果

from Crypto.Util.number import long_to_bytes

def hex_xor(hex_str1, hex_str2):  
    # 确保两个字符串长度相同,如果不同,可能需要前置补零  
    len1, len2 = len(hex_str1), len(hex_str2)  
    if len1 > len2:  
        hex_str2 = '0' * (len1 - len2) + hex_str2  
    elif len2 > len1:  
        hex_str1 = '0' * (len2 - len1) + hex_str1  
  
    # 将16进制字符串转换为整数  
    int1 = int(hex_str1, 16)  
    int2 = int(hex_str2, 16)  
  
    # 执行异或运算  
    result = int1 ^ int2  
  
    # 将整数结果转换回16进制字符串  
    # 使用format函数来确保输出总是具有固定的小写十六进制表示,并去除开头的'0x'  
    # hex_result = format(result, 'x')  
  
    return result  
  
# 示例  
hex_str1 = "6173616473617364617364617364617364617364617364617364617364617364717765737166"  
hex_str2 = "071F000308041255031054584B5C584A5653445203440258460654470556475744125D4A141B"

m = hex_xor(hex_str1, hex_str2)
print(m)
print(hex(m))
print(long_to_bytes(m)) 

13040004482825639027998127915416848738127988052104145969389882111109559127041106665604212093
0x666c61677b65613162633039383839393232373662376639356235346137343335653839657d
b’flag{ea1bc0988992276b7f95b54a7435e89e}’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值