ctf-攻防世界-crypto:幂数加密

 先看题,给出了flag格式和幂数加密的方式。

附件里的内容为8842101220480224404014224202480122

正常的二进制幂数加密只有0,1,2,3,4,5,是不会出现8的。通过百度了解到这是云影密码、

简单说来就是以0为分隔符,将分割后的每个数字加起来,a-z对应1-26

(关于二进制幂数加密和云影密码的具体介绍放在文章最后)

那么可以手动计算,也可以写脚本。

手动计算如下:

脚本基础太差,先引用了别人的

原始脚本来源:攻防世界--CRYPTO--5.幂数加密--wp - 简书

https://adworld.xctf.org.cn/task/writeup?type=crypto&id=5120&number=5&grade=0&page=1(官方wp ch4ce)

a="8842101220480224404014224202480122"
a=a.split('0')  #以0为分隔符,将a分割为列表类型
flag=''
for i in range(0,len(a)):   #从0开始循环a的元素个数-1,即0-7             
    str = a[i] 
    list = []
    sum=0
    for j in str:   #遍历str的每一个字母
        list.append(j)  #列表尾部加上j这个元素
        length = len(list)  #算出一共有多少个数字
        
    for k in range(0,length):
        sum+=int(list[k]) #把所有数字求和
    flag+=chr(sum+64)   #第一个英文字母的ascii码从65开始,所以要加上65-1,然后使用chr将ascii转化为字符
print(flag)
a="8842101220480224404014224202480122"
a=a.split('0')  
flag=''
for i in range(len(a)):
    str=a[i]
    sum=0
    for j in str:
        sum+=int(j)
    flag+=chr(sum+64)
print(flag)

 

关于二进制加密:二进制幂数加密法_百度百科

关于云影密码:https://gist.github.com/wh1t3p1g/ffd15270914492491e18ff9f070eab2b    

【云影密码】
此密码运用了1248代码,因为本人才疏学浅,尚未发现有过使用的先例,因此暂归为原创密码,若有密码界前辈认为不妥,
请指出此密码或类似密码的普遍使用历史并附寄一份到我站内邮箱,我将以最快速度核查并改正。由于这个密码,我和片风云影初识,为了纪念,将其命名为“云影密码”,原文请见谜题大全精华区。
原理很简单,有了1,2,4,8这四个简单的数字,你可以以加法表示出0-9任何一个数字,例如0=28,7=124,9=18。
这样,再用1-26来表示A-Z,就可以用作密码了。
为了不至于混乱,我个人引入了第五个数字0,来用作间隔,以避免翻译错误,所以还可以称“01248密码”。

题目:12401011801180212011401804
第一步,分割,即124  1  118  118  212  114  18  4
第二步,基本翻译,例如124可以表示7,也可以表示16(但不可能是34,因为不会超过26),所以可以放在一边,翻译其他没有异议的,
可得:124  a  s  s  w  o  18  d
第三步,推测得出明文。可以推测后面的18表示r,前面的为p最合适。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值