buu [AFCTF2018]MyOwnCBC 1

题目描述:

三份文件

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

from Crypto.Cipher import AES
from Crypto.Random import random
from Crypto.Util.number import long_to_bytes

def MyOwnCBC(key, plain):
	if len(key)!=32:
		return "error!"
	cipher_txt = b""
	cipher_arr = []
	cipher = AES.new(key, AES.MODE_ECB, "")
	plain = [plain[i:i+32] for i in range(0, len(plain), 32)]
	print plain
	cipher_arr.append(cipher.encrypt(plain[0]))
	cipher_txt += cipher_arr[0]
	for i in range(1, len(plain)):
		cipher = AES.new(cipher_arr[i-1], AES.MODE_ECB, "")
		cipher_arr.append(cipher.encrypt(plain[i]))
		cipher_txt += cipher_arr[i]
	return cipher_txt
	
key = random.getrandbits(256)
key = long_to_bytes(key)

s = ""
with open("flag.txt","r") as f:
	s = f.read()
	f.close()

with open("flag_cipher","wb") as f:
	f.write(MyOwnCBC(key, s))
	f.close()

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

题目分析:

  • 可以看出是通过将ecb模式下的加密进行改写得到不那么正宗的cbc加密模式
    为什么说不那么正宗呢,嗯,缺少了异或操作

  • 加密过程:

    • 先取32字节的初始密钥,再将明文按32字节进行分组
    • 用初始密钥对第一组明文进行ecb模式下的加密,得到第一组密文
    • 然后用第一组密文作为密钥,对第二组明文进行ecb模式下的加密
    • 依次进行(即用上一组密文做这一组的密钥对这一组明文进行加密,得到这一组的密文)
    • 将各组密文拼接起来得到最终完整密文
  • 解密过程即为加密的逆过程,直接看代码理解吧(加密代码都能理解,解密代码就更不在话下了)

import os,sys
os.chdir(sys.path[0])
from Crypto.Cipher import AES
cipher = open('flag_cipher','rb').read()
key = cipher[0:32]
# print(key)
def MyOwnCBC(key,cipher):
    m_txt = b''
    c = [cipher[i:i+32] for i in range(0,len(cipher),32)]
    tempkey = key
    for i in range(1,len(c)):
        dic_cipher = AES.new(tempkey,AES.MODE_ECB)
        m_txt += dic_cipher.decrypt(c[i])
        tempkey = c[i]
    return m_txt

print(MyOwnCBC(key,cipher))
# afctf{Don't_be_fooled_by_yourself}

(注意:其中涉及的变量都是以字节形式存在!!!)

  • 解法二:

(只能说转的弯不是一点点!)

from Crypto.Cipher import AES
import libnum

with open("flag_cipher","rb") as f:
    c=f.read()
    c=libnum.s2n(c)
# print(c)
c = 21292656373488011978364418024107789700887686551530454270445522828464720337206248499124844312171155259641500274278874017314457372773151331307172407714869749176143440687749839770567442331846034966132632446746437743579678545367396741376061652325905716827679715476783532048746086027349867619979913477315160624714430557596381579504025605249954196240156509940191971341082933976267130950808869988591597008953378645992765167331660427602201651289002183061261253340235784861206432341842664224641825531290318599065681883152692316579041346092358484268916741013748596889639508853744660658343891543516724158172382242657896353529023140453270810386977724714267621910713968037150164139128609665536958336097235701367197979335798416236251207007729252523052830385454973965146392046407155155180272651727459783130365548712217044673706002207419100213480033557361008211299219461128812963986646428886085942368169280785236274441447545888762161205585353130687151876162503128053548528182768921141882448760029624045029806765051107885242962127420601194487411325732712519675955560543192779813151302722721338552649859145727955350575192701503422131510568120070728345711761932972505439044647126890223095102720945738677370950849864657467995850857925200505619267270311413264029241173761160789157852659613357304828148364937932250964647387762693941262230355257464245554320440192562478599947973106196183763919883358341668877020119637477763648287503361958502502893410408445479094343127543928237244283218218476337913735881996297103758071297338546709574020805624508427467792568708722397326982249486419815864837966709325287892953951540599625469925089738327786403689628541008420194024823843525393418212344154913334264894965628656130429574500479743436414538636333787030506711510106428148761057631139622050661188746540182565579488253957773470822102760043738678246762502499612888782232054596589007483350152753750569061916109598309458617340741355292650821798820214122488781096100414742756004208744078698162863984819630892780667270791666811885161949926089770963998688543707862983719866929241402237771330607815260605330329173274642894787672412332242774166602507323483948496539313151023644571247043176255279863758836264858421976416173227907442339415245105298343064893438803603612461986125704634296301009994966582752217246159527366850195241306878313150178758573581996729576930975802940869868416271773909052695649237941425747946600717100491378083818202448245490587697888326643535453668425455398848045263489798238106558806599430386848437146067101032116948347867604304936676326896380704663582301937444582539538193684596607309426055261338225821401977930137075632797406023364085546408323097370664918046312088623960825316302416835352498190495277093383182325163990419438929079710426991251445921649332188614107717689033701160555792276504520444051407345616793959373440323290054877445375288913862263689404640230922070060907993291831309033279086376357240572001939273547215645094557628726844335244989439429517424112316118941357594308890394130052372156987033266085760402268414175209456903502544829608600534487631205295191189909711081930563473180896335589147129495537694277321861460768544386763591959557989939286846981077310662114247589536261454359436815263020670634725488926563438773167948562715097859414315538623160751073867890465153478699163393781362433932104820449278800177775834189159954853181387514425004293801318345091108784782726615923996894455593089821429787276069341449612273919400148171170416377733437875864384655589256209926784271181271526166931851845258074095439363817296858238387036176754704529581496698666729002152982970396676356910182791107500953069313005774632591975634341340380709111925574116651544495145299463147718630661482967606012895581859296393549313767483396402302558579626292822192231713835803570651242457779742275512749524355870423112183936833763572266104269114605480071591476091026668845547360426465805633548122957435282625167193959977436453557128333628187898160955120807872244828122004450770947879506746375528475282047679955191297732287428640196362451637128618935694068987143793672503871659501725099541713552917194626851742
m = b''
# c = bin(c)
c_bin = '11100101110111111001010001110011010010101100001011001101000001001110101110110111110011110000010100101000101111101001100001011100111010011100001101011110000111110010000111111011111010100011011011011010011000110001111111111110100100000011000110111011000100110101101100101011101101010111110010110011010111110000011000001000101001110011000101001010010011001110010011110010000001011000100000011101111000010110001111011001001110011111011010111001001001110011111001100011101110110110100110000100100000000110110000011000011100110111010011011111000010010101100110010001111101010110101101100010111101010011010111101111011001000101101101101000010000111000010000110100000010010111100010010101110111000001010010111011010000001011010101110101000100101111110000001010010010000100001100101001110011000111011011101000100001101110000111000010110101111101011010110101110000111111010000101000011001111101011010011001100011101001010100101010010011011010111101011110110111100000011100111101000101101100010101000111111001111111101011010100111111000110111000111000110101100011011011100010000111101010011110110001111101010111101111011011100100000011111110010111011000000111101000000010010100110010011100101111111111010100100011010110110000100100110111000111111101101101101100001100011101010011110101111100111001111000010100010000000110001010100101101011101010010000010100101101010100101000111010001011010100111101100000000111110001111111001101001110001011000110000111001101100110000100000101000100100100010000111000001000110000101011011000110000101111100010000001111110010000001101001100101111010100111110100010001000001101110011100000100110000000000011000101000011100011000000010101000010000010111010110110011011010111000001100110000101011111000000001001011000000011101001111110110100001100110011101110101011011101111000110010110010011000011101110010001000100111101010110000010111111110000011001010111011100111111011000001111010101111000001001110101011010110110101100011100001100010101111100111101101110110001001111011110100001110100000100011010011001110100000110001001000100110101101101001101100000011001111101110111001110100000000000111100100011011010000011011111001011001011010111011111100101111100001110100011000100010010010101101011001000000000000100111111000000101111011011011101000001110001100010010110110011101111011101000000110100110101001001100010011101111111011001000011010111101110110001100000011000000101101001001111101101100011100011110011111111001000000000110100110000011001000011101111111101011110000101010111100011000101101100110100110101100100000011011001000011101011100010011110011001110010110101100101001011010111111011100110010111010111100010100000110100100011000011001111110100111110111010001010111010010111010101011100011001100011010011110010011110001000100101011010001111110010001001000010101010000110011111001000101011111101000101101101111110001111100100011001101100011011110100101101100111001010000101011010110110001111110000110001011100110000110011010011101101111001010111011010110110011111101110000011010101011011101000111010000000011111001010010100010010001001001001011000001101011101100011000101111111001001100101111010001110001111100101001000111001101000010110110001010001111011101010101001111100011111100100010100100100000000111100000001110100101000110111110101110111100011110101110100010010011100011100001010101010110010001111010010110111100100101111111001001100101010100100100101001000111010101111011111010010011101001010110011010100010011111110101101011001110000101010000101001110101110111011010111110100001001000100010000111101100111110101000111100010001000011000011010001100000010001000101101110001001100101010110111011100110100100111111110000111011000101100100010101111100010110110111100010101010000111111111110111111010011001111110100001110110011010000011101000011001110100100010001011101011111011100101110010100010101101111100110010101111101000011110111100101010111010011001011001010110010111011110100100011010100101111000010000010101010101111100011110110001110111111110110110010101111010010011000110101001000001111101100100101000101110111011111100111001101010011100011110110100111100100100010010010111110001110111001101111000101001100010011110011001111011000000001011100000110110111110101010000001111101011101101010010010100000111010010110001001111110110100000000011010100100100101111101010110110110010001010010011100000011100110000010011010001100011011110010011001111100111001100011000111101001010100000011110001101110101100101111000011010011100000000010110010110011000001001011000111001000111011110111001111100100000000011001101000000011001110011110001110110100000010011111110101001111101110001110101101001100110001101000010101001111100100110100010001000111001100101010101110110101100000110010111100010011101011011011111101111110001110000101011110011010011111001111011011011000100110111111010111110101100110011110010001110110111110100010011000111000000010011100001100000100110101001001010111000101101010101000101001000010001110110011011010110101101110011001100110010110100000101101100110011111011110101110110101001110101111000110011001111010100000111011001101000100110100111010001100111101001010000000100001010000110100001101110110011000001010100000110001101010111010001100000100110110010101100100010110101010110001010010010001111101001100111011100101010111010000110011100111101110011011011111100001011110100010101011001100100110001010110011010000000001111100001001011001001111111011010001011000111110001000111111101100111101110010000101001001101000001000010100100101111000010000001001000000001101111000010010000110101011000111110011100011101110011001001110011111101111111101111111011010010101111000001010011000000101000000001110001001111101010010100011000101100001000101110110011100001100101111000101000011111001010011000000111101110100100011110001100101111111001110101110000000101101111010101111001111111110111000100010101100100111100101001001011100011010011001001101111100110100011011111010001111000111101101011100111111010110010010111111100100000000100101010110100110111110011100101011110001000001010000010001111010001111111100101110110111111110110111001110000101001011100010000111010001000100101000011000000000001001000010010101110000010101011101010000110101000001100000011011100111011111110010100010111111101010000100100100001101010001011110100000100110001110000001101101010111110111010111000000111001011110111110001000101111011000001001010001100000010010110111100111100110010000011110010000010001010110101010001101100100110110101010100110100011111100011011010010111011100110111011000101011000001011100111000001100100010111001001001001000101101100110111101111101100110000000011000010100101100100011010001011001000110101010011000111010001011110101100011110100110010010010101000001010001101100100110010000001111101100110100000001100001100011000101000001100110110011010100011000101001110101101010010011000010110011010110110000010001011000001100111101101100100001010000001011101000101001100111100010101111011011001001000001110100010101100101010010101010010111100111011111111010110111000110100000101101100000010101110010010011110000100010010111110011010111001101110010100110101111110100000100101100011001010011110010000110100111001111111100000011101010101011011011110011101001010100111000001100000110110001000011101010001001011101011111100100111011000011100111100100010011101101010111101010000111011010111110101001110011010101011100000001100101100100000101000101111000111111011011011010010110100010001001110110100110000110011110101101100111110111000100100010010010011100101111100101001101110000000111101001111001101110100101100001111101100000101010000010011000010011001110011101100011011010000110101100111000101000011011111110101110101101110101101001000000011010010011001110101011111101100010011010000001011111100111000111000101101111100110100010001010001110000010101101101100010111110101000111011000010101001101000100000110101100010000011001100001000100010111111110110110000110100010000100011111011111011010110101110100011001110011001100001001110100011011010001101111110010000111001110001101110100010010001111100010001001001111011101011001001110101110011001011101001101110111110110110100101011101010010011011110001011000100101010101110101100000001101100000011110011111110101111100001011011111110110110010010000000111001000001000010101100000100010000100110011111010110010110011001101111100010011100100100100110110000001001100101001110011010000111001010001011110101011000001000010001110011100100001101000110000101011000011101111011110011110010000111001010101100010110010101101101011001011111011011110110011010111011111011100110000010100010110100101100111111111011001111011111001101010010011010000000000100010100110100101100001011100101011100100110100100111000100011011000001111010000001010001101101010000011000011100011000110010100011111100011001011010111011010001101010111111110010010001100110111010101010101000100010001100111111100010101110100000001110110110110001010001101100100111101011110100010000110011111110011001110010110011011011000110110011001110000011000010110111110001100011101011011101111111000111001110111011110000100111010100110111100100101110100100111011000011100000100110001011001001101010100101100110001111010111011010000000111011101000011000011010101001111100011101101110111110011010001001111100101110010110011010010001011011101010010110011100010100100100000000011100101001010001100100011101010011001101011111000001100011100100000010101111010101011101001111100101110101000001111010010111100010110110101101100110000100001011100110101100010001001100010101101100111101110011010000101100001101001001001010011110001101011110000111111011101111000101111001010001011001110001011010000100010000101001000011010111000111011100110000100000001100001000000110100100111100100110110111110010111010111011111010110001110101101001111001110110110101110010000010101100010111001011101011000100101110101110101000111001101000110010001000101011010101100011010001000010100100011110111001111101000000101110000010100111100101100010001001000000110000111011010011010001001001111101000101101100110001000001011101111000010010101100101101000011001111011011000100000011001100000001001101100101100110000010011001100110011101010011001111100010101010001011001100111000110110000001001010000101000101001011000011110101011100101101011101001100011100001100101110000110111000000000000110101010110101001111100100100110101100101111010110011010001011100100010010010100101010010110110001010000110001000100010011101001110011101110000001101100000001110101111110011001111100101101110110110110010010111101110010000000011101010101001111010100000110001010110101110001001001111100101111110001100100100010111000111111001000110001101101011010100011000010000110110110011010010110010110000000111111111100010101011011011111101110111010110101010000111000100101001111111000110010011000011101110000011101101110011001110010101001011011111000100101101100100001000101101010000000000101111110011100001111111011001100011100110110010111011000110110111101011101001010101100000000011010010000100111111000010100101110000000110000110111111111101000111000001101001010100010111010100010110101101011111100100001000110100100011010100000000100110001110001110111000101001010010010011011100111011101111101110001110110011110001100111010101000101110011000100111010101001001011000101110101000010100111110011110110010111011000100010010001111001100011010111011001110111100000100010010111011010110011101100111000111110111111101100011110011011000110111010011101101001110011010100000111011110111010010001110101011001000010110001111010111101001100100100111001011001011010010001011101110101101101100101010011111111010001101100011010010100001000001010010011011001011010011011100100101100100100000011101011110111001111011000100000111101011000100001101000011001000000101111110010110110000111011111101110111010011000010101010111001010001101110100110110001011001101101010101100101101001111010101000110011111011010100000000101101110111101000101110010101011110010111010010000101111001100100011101000000000110011101100000001000111011101110000000101010000011001111110000011001001110000010111100010111010011000000100011100010111001011100000000111111111010000111001100001000101100101000100110101111100111101011100001100010111011000100000111001010010010011001100111110010110010011011011101100100001001001100101000011110011100000001000111101011010100010001101110100111100011100110100010010001111110111101100110010001010010011000001100110111010000001010010111101000001001100110000110000111110010011100111110001011110100101011100011001100101010100001001000011110110011101001011111001111111110101011101000010100001011100011101011001011001010111001101001110010010010111010110011111010010011001100011000011101010000100110000110111000111100100101110010011111000101111000110100100011110010110001000010111010101010000111111001001000001010001111110100101111100111100010011101100001100110010001000110110110100111011010011000100111110100111001101100111001110001010000000000000110010010111001111001110111111110101101101100100010011101111000010110000011011000101010100111001011011011110110001011010110011010110011010000111001001000011000000100100101111010110001000010101011010101001010001101000000011001101100111011100110000111101011000001000100101010100111010111101100100001100111100111000001110110101010011110111110100010111001011111100110000011000000011100000111100111100111000000011001000010100000011111111001010110100101101010010110111010100111101101010001101011001101100010110011001000101110011011101010010010100001010001010000001010110101010101110100010100100100111001111010011000100101011000110000100011010001000100101000110001110011110'
int_list = [int(c_bin[i:i+8], 2) for i in range(0, len(c_bin), 8)] # 将二进制字符串转换为整数列表
print(int_list)
c_bytes = bytes(int_list) # 将整数列表转换为字节串对象 amazing!
cipher = [c_bytes[i:i+32] for i in range(0,len(c_bytes),32)]
for i in range(1,len(cipher)):
    key = cipher[i-1]
    mm = AES.new(key,AES.MODE_ECB,)
    m += mm.decrypt(cipher[i])
print(m)

收获:

知道了如何将2进制转化为字节形式:

bin_str = '0110100001100101011011000110110001101111' # 二进制字符串
int_list = [int(bin_str[i:i+8], 2) for i in range(0, len(bin_str), 8)] # 将二进制字符串转换为整数列表
byte_data = bytes(int_list) # 将整数列表转换为字节串对象

print(byte_data)  # b'hello'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值