[AFCTF2018]MyOwnCBC(考点:AES,CBC方式模拟)

题目文件:
flag_cipher.txt

暹攕J峦敕?(緲\槊^!6赾1?[+祙砡?JL潋?醕?龉'>c籭剙lst?Y戸kb?飀[hC?	x曑籃祏?HC)蘶鑶崧字得?g謾帟*M痎?=臛琥渣n8??П鮷蹛?梎zS'/鼿致M泅?u=|鐓﹌?-R帇S?求N,a蜆AD?露0?~@?S鑸78& 1C?B瓫\厊X煷3;玾尣a軋灛?粺皕?玔X釆貫??H氌l?鋗鵨??Y 	?惰8亩w?殦坎鱟襺鼻熶???糱佴?萿捏9k)k?肱憜~焧WK1腏样C>E~媜侨蛵閘?智釈榝澕宪?敘D捔/渌亚蔊4-?誒徣x攐擘N8UY栻_蓵I)^鶱暁夶k8T)譾緞垏酬<D0褋n&U粴O痨Y駇猕鏖煛贍鑗H嫰箁娺2緡极Yw^U_?禬て?d㈩?由_外槥g?僶?譲J?? jI}[dRp9俬乞g蝐?齐/
8?K庽>@??@熢麕刺hT?Ds*2?埙銋ym壙_Y濭o€?MI\Zà#砶[櫃h-欦肫g?4M:3襽?
賯犉畬edZ琑G?晅3炴邊璜2b矦	dc?耻??梽	 ?斌庢N~i^
`P'裕vp伺斃鱄駰螽薤??瞴Iq驠?{\齞繍	V涚+??.唔?竾DJ 悤罻P?濣?5牁鄊_u厘飯絺Q?鐧怑j崜j埔頽臽沽憆I惋? 聳F?T荅??AF蓯>??A??5癊??饨睞裏R﹜唠q牰rO椡sr汖睌?s?螘80lC_摪鐟;W╲晶5\Y徾ih壼a灦}膲'/斳?	勎v6喅?u??縝h?[鎴杜?匨kf鸻?髭譌s0?F鼑8?>"Ou摦e觲跩闙饽? 9+Bg諽涒rI?S?Ⅴ`剆愌卆摅萺琘[Y}綒锕倠K?祺虸?SK暽も6@8芉]?7UQ熍tm?O^坓?f刭?[?n?葆:浬t潎艙T?籃wC
S惴|?\矵稲? R寧嗲 W蜿K诺?\?b秢?IO瘕?(硧B!Hk庢@襶6鵸遆隣;k怴.]b]u褢?!H?乸S? a趆撹禸?e貋?蔡3:欛TY渓	B奨z筴?e胮 誮|揧z?"JT?b"t鏿6鵱?頏:╆V笓屮?憤璅?怖猸縲Z∧я?囗体K|Kd"? ?f9察m毳XHO聴?蚜訸卒#H?c庘敁s活;<gT\年捙?筚v"G樧gx"]泔靬焙v溤顟諓彪?鍠憌[eO鬺iB
M枦捝痵貎?/薬呋?\爻j灿?鰻顴始築???wp~?嫤qr??刌D紫\1v ?贴d鄄e8酲嵱?H趣翛燫?0娩缗閈fU	gK琮]
e曂9%&c?躽.O嬈戝圿T?$~椣疤堐N?橥溾€%?齧?铝盩宸眐5?惱掯圲猀?gsX"U:<囗S逧梭兿8?-Ku=ㄖlY憇u%
()'=1+F垟c?

题面:

CBC什么东西呀?不就是把上一轮加密的影响扩散到下一轮嘛
它写的CBC一点都不正宗
我这样写肯定也行的!

大概吧?

MyOwnCRC.py

#!/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()

加密过程就是用上一级的密文,作为下一次加密的密钥key,所以初始密钥key可以知道就是题目给的密文前32个,所以直接逆向解密就可以了。

import os,sys
os.chdir(sys.path[0])
from Crypto.Cipher import AES
from Crypto.Random import random
from Crypto.Util.number import*

cipher = open('flag_cipher.txt','rb').read()
key = cipher[0:32]
# print(key)
def MyOwnCBC(key,cipher):
    cipher = [cipher[i:i+32] for i in range(0,len(cipher),32)]
    flag = b''
    tempkey = key
    for i in range(1, len(cipher)):
        dic_cipher = AES.new(tempkey, AES.MODE_ECB)
        flag += dic_cipher.decrypt(cipher[i])
        tempkey = cipher[i]
    return flag
	
print(MyOwnCBC(key,cipher))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
《高考数学考点全析:解析几何PDF》是一本针对高考数学解析几何考点的详细分析和解释的电子书。这本书主要包含了高考数学中解析几何的重要考点和题型,通过对每个考点进行逐一分析,帮助学生全面了解解析几何的知识点及解题技巧。 首先,该书从解析几何的基础知识开始,如坐标系、直线方程等,然后深入讲解了平面几何中的问题,如线段相交、垂直平分线等。接着,书中详细介绍了解析几何中的直线和圆的相关概念和性质,如直线的斜率、两直线位置关系等。此外,该书还包含了解析几何中的一些重要定理,如线段的分点公式、两点间的距离公式等,方便学生记忆和应用。 除了理论知识点的讲解,该书还提供了大量的例题和习题,帮助学生巩固和应用所学的知识。每个例题都有详细的解题过程和解析,让学生能够清楚地了解解题思路和解题方法。而习题则涵盖了各种难度和类型的题目,旨在培养学生独立解题的能力和灵活运用知识的能力。 通过阅读《高考数学考点全析:解析几何PDF》,学生可以全面认识解析几何的知识点和解题技巧,更好地应对高考数学中与解析几何相关的问题。同时,该书也是一本方便学生自主学习的参考书,学生可以按照自己的学习进度和需求,有针对性地选择和阅读其中的章节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值