困在栅栏里的凯撒自我理解

http://www.shiyanbar.com/ctf/1867
小白发现了一段很6的字符:NlEyQd{seft}




解:
1.NlEyQd{seft}先是栅栏密码解密
分解得
Nl
Ey
Qd
{s
ef
t}
合并NEQ{etlydsf}
2.现在用恺撒解密,我试过将NEQetlydsf一起移动相同位移量,结果如下,不尽人意。
第1种可能:   NEQetlEdsf
第2种可能:   OFRfAmFetg
第3种可能:   PGSgBnGfAh
第4种可能:   QHThCoHgBi
第5种可能:   RIUiDpIhCj
第6种可能:   SJVjEqJiDk
第7种可能:   TKWkFrKjEl
第8种可能:   ULXlGsLkFm
第9种可能:   VMYmHtMlGn
第10种可能:   WNZnIANmHo
第11种可能:   XO[oJBOnIp
第12种可能:   YP\pKCPoJq
第13种可能:   ZQ]qLDQpKr
第14种可能:   [R^rMERqLs
第15种可能:   \S_sNFSrMt
第16种可能:   ]T`tOGTsNA
第17种可能:   ^UaAPHUtOB
第18种可能:   _VbBQIVAPC
第19种可能:   `WcCRJWBQD
第20种可能:   aXdDSKXCRE
第21种可能:   bYeETLYDSF
第22种可能:   cZfFUMZETG
第23种可能:   d[gGVN[FUH
第24种可能:   e\hHWO\GVI
第25种可能:   f]iIXP]HWJ
第26种可能:   g^jJYQ^IXK
第27种可能:   h_kKZR_JYL
第28种可能:   i`lL[S`KZM
第29种可能:   jamM\TaL[N
第30种可能:   kbnN]UbM\O
第31种可能:   lcoO^VcN]P
第32种可能:   mdpP_WdO^Q
第33种可能:   neqQ`XeP_R
第34种可能:   ofrRaYfQ`S
第35种可能:   pgsSbZgRaT
第36种可能:   qhtTc[hSbU
第37种可能:   riAUd\iTcV
第38种可能:   sjBVe]jUdW
第39种可能:   tkCWf^kVeX
第40种可能:   AlDXg_lWfY
第41种可能:   BmEYh`mXgZ
第42种可能:   CnFZianYh[
第43种可能:   DoG[jboZi\
第44种可能:   EpH\kcp[j]
第45种可能:   FqI]ldq\k^
第46种可能:   GrJ^mer]l_
第47种可能:   HsK_nfs^m`
第48种可能:   ItL`ogt_na
第49种可能:   JAMaphA`ob
第50种可能:   KBNbqiBapc
第51种可能:   LCOcrjCbqd
第52种可能:   MDPdskDcre
所以试试分开算都有26种不会像上面那样52种,所以我把大写自动转换小写(默认都是26个小写)
,最后把对应原先大写对应位置字母改成大写即可,毕竟同理分开算。看结果。
第1种可能:   neqetlydsf
第2种可能:   ofrfumzetg
第3种可能:   pgsgvnafuh
第4种可能:   qhthwobgvi
第5种可能:   riuixpchwj
第6种可能:   sjvjyqdixk
第7种可能:   tkwkzrejyl
第8种可能:   ulxlasfkzm
第9种可能:   vmymbtglan
第10种可能:   wnzncuhmbo
第11种可能:   xoaodvincp
第12种可能:   ypbpewjodq
第13种可能:   zqcqfxkper
第14种可能:   ardrgylqfs
第15种可能:   bseshzmrgt
第16种可能:   ctftianshu
第17种可能:   dugujbotiv
第18种可能:   evhvkcpujw
第19种可能:   fwiwldqvkx
第20种可能:   gxjxmerwly
第21种可能:   hykynfsxmz
第22种可能:   izlzogtyna
第23种可能:   jamaphuzob
第24种可能:   kbnbqivapc
第25种可能:   lcocrjwbqd
第26种可能:   mdpdskxcre

最后答案一眼看出CTF{tianshu}


#实现65-122ASCII字母本题不合适
def change(c,i):
	num=ord(c)
	if(num>=65 and num<=122):  
		num=65+(num+i-65)%(52)  
	return chr(num)  

      
def kaisa_jiAmi(string,i):  
	string_new=''  
	for s in string:  
		string_new+=change(s,i)  
	print(string_new)  
	return string_new  
  
#本题有种暴力解密感觉  
def kaisa_jiEmi(string):  
	for i in range(0,52):  
		print('第'+str(i+1)+'种可能:',end='   ')  
		#区别在于 string 是该对象原本就是字符串类型, 而 str()则是将该对象转换成字符串类型。  
		kaisa_jiAmi(string,i)  
          
#你要知道input输入的数据类型都是string     
def main():  
	print('请输入操作,小写大写一同位移:')  
	choice=input('1:恺撒加密,2:凯撒穷举解密.请输入1或2:')  
	if choice=='1':  
		string=input('请输入需要加密字符串: ')  
		num=int(input('请输入需要加密的KEY: '))  
		kaisa_jiAmi(string,num)  
	elif choice=='2':  
		string=input('请输入需要解密字符串: ')  
		kaisa_jiEmi(string)  
	else:  
		print('输入错误,请重试')  
		main()  
          
if __name__=='__main__':  
	main()  
  
      
      

#实现97-122小写ASCII字母(默认)用于本题
def change(c,i):
	c=c.lower()
	num=ord(c)
	if(num>=97 and num<=122):  
		num=97+(num+i-97)%(26)  
	return chr(num)  

      
def kaisa_jiAmi(string,i):  
	string_new=''  
	for s in string:  
		string_new+=change(s,i)  
	print(string_new)  
	return string_new  
  
#本题有种暴力解密感觉  
def kaisa_jiEmi(string):  
	for i in range(0,26):  
		print('第'+str(i+1)+'种可能:',end='   ')  
		#区别在于 string 是该对象原本就是字符串类型, 而 str()则是将该对象转换成字符串类型。  
		kaisa_jiAmi(string,i)  
          
#你要知道input输入的数据类型都是string     
def main():  
	print('请输入操作,注意默认小写,大写同理:')  
	choice=input('1:恺撒加密,2:凯撒穷举解密.请输入1或2:')  
	if choice=='1':  
		string=input('请输入需要加密字符串: ')  
		num=int(input('请输入需要加密的KEY: '))  
		kaisa_jiAmi(string,num)  
	elif choice=='2':  
		string=input('请输入需要解密字符串: ')  
		kaisa_jiEmi(string)  
	else:  
		print('输入错误,请重试')  
		main()  
          
if __name__=='__main__':  
	main()  
  
      
      
困在栅栏里的凯撒自我理解_第1张图片

你可能感兴趣的:(困在栅栏里的凯撒自我理解)