from Crypto.Util.number import long_to_bytes a=11515195063862318899931685488813747395775516287289682636499965282714637259206269 print(long_to_bytes((a))) #flag=b'crypto{3nc0d1n6_4ll_7h3_w4y_d0wn}'
题目五:简单(字符串)异或
题意:将字符串label的每个字符与13异或
脚本可得:
1 2 3 4 5 6
a="label" flag="" for i in a: flag+=chr(ord(i)^13) print(flag,end="") #aloha
题目五:异或的基本算法
题意:异或求出flag
解决方案:直接用最后一个异或前面两个可以得到flag
1 2 3 4 5 6
from pwn import xor k1=bytes.fromhex('a6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313') k2_3=bytes.fromhex('c1545756687e7573db23aa1c3452a098b71a7fbf0fddddde5fc1') flag=bytes.fromhex('04ee9855208a2cd59091d04767ae47963170d1660df7f56f5faf') print(xor(k1,k2_3,flag)) #b'crypto{x0r_i5_ass0c1at1v3}'
题目六:(异或一定要转为字节去异或)
题意:
用单个字节的意思就是用了单个字符去异或
在ascill码中有256中可能所以遍历所有可能
脚本可得:
1 2 3 4 5 6 7 8 9 10
from binascii import unhexlify,hexlify cipher='73626960647f6b206821204f21254f7d694f7624662065622127234f726927756d'
cipher_bytes=unhexlify(cipher) print(cipher_bytes) for xor_key inrange(256): decoded=bytes([i^xor_key for i in cipher_bytes]).decode(errors='ignore') if decoded.isprintable(): print(decoded) #寻找可得crypto{0x10_15_my_f4v0ur173_by7e}
题目七:脑经急转弯异或
题目:
题意:看提示,记住旗帜的标志:”crypto{“
题解:先把数据转换位字节,然后跟标识异或得到提示:key=myXORkey
再将字节和key异或可得到flag
下面是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
from pwn import xor data = '0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104' decoded_data = bytes.fromhex(data) # hex-->byte str = 'crypto{' f=bytes(str,"utf-8") print(xor(decoded_data,f)) key = ''.join((chr(decoded_data[i] ^ ord(str[i]))) for i inrange(len(str))) print(key) d="myXORkey" c=bytes(d,"utf-8") flag=xor(decoded_data,c) print(flag) #b'crypto{1f_y0u_Kn0w_En0uGH_y0u_Kn0w_1t_4ll}'