在CTF中,谁能想到八卦和二进制还能来一场美丽的邂逅呢?


阅读须知:
探索者安全团队 技术文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作,由于传播、利用本公众号所提供的技术和信息而造成的任何直接或者间接的后果及损失,均由使用者 本人负责,作者不为此承担任何责任,如有侵权烦请告知,我们会立即删除并致歉,创作不易转载请标明出处.感谢!
Q:现在,给你一组由八卦图方位组成的密文,你能破解出其中的含义吗?

         震坤艮 震艮震 坤巽坤 坤巽震 震巽兑 震艮震 震离艮 震离艮

首先,让我们先了解一下八卦与二进制的对应关系

根据二进制数的规定:有,用1表示;无,用0表示。我们可以得出八卦各卦阳爻和阴爻的二进制数。下面我们写出八卦各卦阳爻的二进制数(即有阳爻为1,无阳爻为0):

      坤:黑黑黑,卦符阴阴阴,二进制数为000 

      艮:黑黑白,卦符阴阴阳,二进制数为001

      坎:黑白黑,卦符阴阳阴,二进制数为010

      巽:黑黑白,卦符阴阳阳,二进制数为011

      震:白黑黑,卦符阳阴阴,二进制数为100

      离:白黑白,卦符阳阴阳,二进制数为101

      兑:白白黑,卦符阳阳阴,二进制数为110

      乾:白白白,卦符阳阳阳,二进制数为111

即,dict ={‘乾’:‘111’,‘巽’:‘110’,‘离’:‘101’,‘艮’:‘100’,‘兑’:‘011’,‘坎’:‘010’,‘震’:‘001’,‘坤’:‘000’}
另外,了解一下chr(),
chr(i) -> character
Return a string of one character with ordinal i; 0 <= i < 256.
参数是0 - 256 的一个整数,返回值是当前整数对应的ascii字符。参数可以是10进制也可以是16进制的形式。

例如:

十六进制:>>> print chr(0x30), chr(0x31), chr(0x61)

                     0 1 a

十进制:>>> print chr(48), chr(49), chr(97)

                    0 1 a

Answer:

dict = {'乾':'111','巽':'110','离':'101','艮':'100','兑':'011','坎':'010','震':'001','坤':'000'}c= '震坤艮 震艮震 坤巽坤 坤巽震 震巽兑 震艮震 震离艮 震离艮'
t=c.split(' ')  #split方法用于拆分字符串并将其存储在列表中。内置方法返回字符串中的单词列表,使用“分隔符” 作为分隔符字符串
f=''for i in range(len(t)):    
	s = ''    for j in range(len(t[i])):       
		 k=t[i][j]        
		 a=dict[k]  #找到第i组每个八卦对应的二进制       
		 s+=a  #将第i组所有八卦对应的二进制相加      
		 ch=chr(int(s,2))  #int(s,2)将二进制转化为十进制,chr()将该值对应到ASCII字符    		 f+=chprint(f)

最后运行得到:Da01sall
感谢 freeJQ 大师傅的精彩投稿,freeJQ 师傅可是少见的美女师傅!!!又美又有实力!!!大家多多关注哦!喜欢的朋友可以多多点赞!!!
欢迎关注探险者团队公众号!有任何困惑都可以跟我们分享!

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值