zoukankan      html  css  js  c++  java
  • [WP]XCTF- 攻防世界-crypto-新手练习区

    1、base64

    Y3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9

     2、Caesar

    凯撒加密

    oknqdbqmoq{kag_tmhq_xqmdzqp_omqemd_qzodkbfuaz}

     3、Morse

    摩斯密码(摩尔斯密码)

    11 111 010 000 0 1010 111 100 0 00 000 000 111 00 10 1 0 010 0 000 1 00 10 110

    4、幂数加密

    8842101220480224404014224202480122

    把数字串用 0 分割开后,再将每组密码相加后的和代换为字符

    1 a = [23, 5, 12, 12, 4, 15, 14, 5]
    2 s = ''
    3 for i in range(26):
    4     s += chr(i+0x41)
    5 flag = ''
    6 for i in a:
    7     flag += s[i-1]
    8 print(flag)

    5、Railfence

    ccehgyaefnpeoobe{lcirg}epriec_ora_g

    栅栏密码 w型

    6、不仅仅是Morse

    --/.-/-.--/..--.-/-..././..--.-/..../.-/...-/./..--.-/.-/-./---/-/...././.-./..--.-/-.././-.-./---/-.././..../..../..../..../.-/.-/.-/.-/.-/-.../.-/.-/-.../-.../-.../.-/.-/-.../-.../.-/.-/.-/.-/.-/.-/.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/.-/.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../-.../.-/.-/.-/-.../-.../.-/.-/-.../.-/.-/.-/.-/-.../.-/-.../.-/.-/-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/-.../-.../.-/.-/-.../-.../-.../.-/-.../.-/.-/.-/-.../.-/-.../.-/-.../-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../-.../.-/.-/-.../-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/-.../-.../.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/-.../-.../.-

    首先将其处理为 01 串

     1 a = '--/.-/-.--/..--.-/-..././..--.-/..../.-/...-/./..--.-/.-/-./---/-/...././.-./..--.-/-.././-.-./---/-.././..../..../..../..../.-/.-/.-/.-/.-/-.../.-/.-/-.../-.../-.../.-/.-/-.../-.../.-/.-/.-/.-/.-/.-/.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/.-/.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../-.../.-/.-/.-/-.../-.../.-/.-/-.../.-/.-/.-/.-/-.../.-/-.../.-/.-/-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/-.../-.../.-/.-/-.../-.../-.../.-/-.../.-/.-/.-/-.../.-/-.../.-/-.../-.../.-/.-/.-/-.../-.../.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../-.../.-/.-/-.../-.../.-/.-/-.../.-/.-/-.../.-/.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/.-/-.../.-/-.../.-/.-/-.../-.../.-/-.../.-/.-/.-/.-/-.../-.../.-/-.../.-/.-/-.../-.../.-'
     2 v = a.split('/')
     3 bin_list = []
     4 for i in v:
     5     value = ''
     6     for j in i:
     7         if j == '-': value += '1'
     8         else: value += '0'
     9     bin_list.append(value)
    10 flag = ''
    11 for i in bin_list:
    12     flag += i + ' '
    13 print(flag)

     莫斯密码在线转换

     

     根据提示,还有另一种加密——培根密码

    7、混合编码

    JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzk7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM2ODsmIzY5OyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjNTI7JiM3NjsmIzEyMjsmIzEwNzsmIzUzOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc3OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiMxMDc7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTIwOyYjNzg7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjODQ7JiM2OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzUwOyYjNzY7JiMxMjI7JiM2OTsmIzEyMDsmIzc4OyYjMTA1OyYjNTY7JiM1MzsmIzc4OyYjMTIxOyYjNTY7JiM1MzsmIzc5OyYjODM7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM5OTsmIzExODsmIzc5OyYjODQ7JiM5OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjNjk7JiMxMTk7JiM3NzsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjNjU7JiMxMTg7JiM3NzsmIzg0OyYjNjU7JiMxMjA7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiMxMDU7JiM1NjsmIzEyMDsmIzc3OyYjNjg7JiM2OTsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzExOTsmIzc2OyYjMTIyOyYjMTA3OyYjNTM7JiM3NjsmIzEyMjsmIzY5OyYjMTE5OyYjNzc7JiM4MzsmIzU2OyYjMTIwOyYjNzc7JiM4NDsmIzEwNzsmIzExODsmIzc3OyYjODQ7JiM2OTsmIzEyMDsmIzc2OyYjMTIyOyYjNjk7JiMxMjA7JiM3ODsmIzY3OyYjNTY7JiMxMjA7JiM3NzsmIzY4OyYjMTAzOyYjMTE4OyYjNzc7JiM4NDsmIzY1OyYjMTE5Ow==

    base64 解密

    HTML 解密

    在进行一次 base64 解密

     

     之后对得到的数字串根据 ASCII 码转换为字符串

    1 a = '119/101/108/99/111/109/101/116/111/97/116/116/97/99/107/97/110/100/100/101/102/101/110/99/101/119/111/114/108/100'
    2 b = a.split('/')
    3 flag = ''
    4 for i in b:
    5     value = int(i)
    6     flag += chr(value)
    7 print(flag)

    8、easy_RSA

    在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
    求解出d

    由所给的 p, q 我们可以求得 m = (p-1)*(q-1)

    之后再由 d * e = 1 mod m 可以知道 d 即是 e 模 m 的逆元,运用扩展欧几里得算法就能得到逆元(我这里直接从网上找到一段扩展欧几里得算法的代码)

     1 p = 473398607161
     2 q = 4511491
     3 e = 17
     4 n = p * q
     5 m = (p-1) * (q-1)
     6 print('m=' + str(m))
     7 
     8 
     9 #欧几里得算法求最大公约数
    10 def get_gcd(a, b):
    11     k = a // b
    12     remainder = a % b
    13     while remainder != 0:
    14         a = b 
    15         b = remainder
    16         k = a // b
    17         remainder = a % b
    18     return b
    19     
    20 #改进欧几里得算法求线性方程的x与y
    21 def get_(a, b):
    22     if b == 0:
    23         return 1, 0
    24     else:
    25         k = a // b
    26         remainder = a % b        
    27         x1, y1 = get_(b, remainder)
    28         x, y = y1, x1 - k * y1            
    29     return x, y
    30     
    31 a, b = 17, m
    32  
    33 #将初始b的绝对值进行保存
    34 if b < 0:
    35     m = abs(b)
    36 else:
    37     m = b
    38 flag = get_gcd(a, b)
    39  
    40 #判断最大公约数是否为1,若不是则没有逆元
    41 if flag == 1:    
    42     x, y = get_(a, b)    
    43     x0 = x % m #对于Python '%'就是求模运算,因此不需要'+m'
    44     print(x0) #x0就是所求的逆元
    45 else:
    46     print("Do not have!")

    9、easychallenge

    题目所给的 pyc 文件,先在线反编译为 python 代码

    import base64
    
    def encode1(ans):
        s = ''
        for i in ans:
            x = ord(i) ^ 36
            x = x + 25
            s += chr(x)
        
        return s
    
    def encode2(ans):
        s = ''
        for i in ans:
            x = ord(i) + 36
            x = x ^ 36
            s += chr(x)
        
        return s
    
    def encode3(ans):
        return base64.b32encode(ans)
    
    flag = ' '
    print 'Please Input your flag:'
    flag = raw_input()
    final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
    if encode3(encode2(encode1(flag))) == final:
        print 'correct'
    else:
        print 'wrong'

    先后对 flag 进行 encode1, encode2, encode3 进行加密得到 final

    那么将顺序反过来解密 final 就能得到 flag

     1 import base64
     2 
     3 def main():
     4     decode()
     5 
     6 def decode():
     7     final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
     8     result = base64.b32decode(final)
     9     result1 = []
    10     for i in result:
    11         result1.append(i)
    12     print(result1)
    13 
    14     result2 = []
    15     for i in result1:
    16         value = i ^ 36
    17         value -= 36
    18         result2.append(value)
    19     print(result2)
    20 
    21     result3 = []
    22     for i in result2:
    23         value = i - 25
    24         value ^= 36
    25         result3.append(value)
    26     print(result3)
    27 
    28     flag = ''
    29     for i in result3:
    30         flag += chr(i)
    31     print(flag)
    32 
    33 main()

     10、转轮机加密

    1:  < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
    2:  < KPBELNACZDTRXMJQOYHGVSFUWI <
    3:  < BDMAIZVRNSJUWFHTEQGYXPLOCK <
    4:  < RPLNDVHGFCUKTEBSXQYIZMJWAO <
    5:  < IHFRLABEUOTSGJVDKCPMNZQWXY <
    6:  < AMKGHIWPNYCJBFZDRUSLOQXVET <
    7:  < GWTHSPYBXIZULVKMRAFDCEONJQ <
    8:  < NOZUTWDCVRJLXKISEFAPMYGHBQ <
    9:  < XPLTDSRFHENYVUBMCQWAOIKZGJ <
    10: < UDNAJFBOWTGVRSCZQKELMXYIHP <
    11: < MNBVCXZQWERTPOIUYALSKDJFHG <
    12: < LVNCMXZPQOWEIURYTASBKJDFHG <
    13: < JZQAWSXCDERFVBGTYHNUMKILOP <
    
    密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
    密文为:NFQKSEVOQOFNP

    根据密钥重新排序十三组字符串

    将密文的十三个字符分别排到每组的起始位置

    之后更改横纵方向方便查看,当然仅仅为了是方便查看

     1 s = ['ZWAXJGDLUBVIQHKYPNTCRMOSFE ',
     2  'KPBELNACZDTRXMJQOYHGVSFUWI ',
     3  'BDMAIZVRNSJUWFHTEQGYXPLOCK ',
     4  'RPLNDVHGFCUKTEBSXQYIZMJWAO ',
     5  'IHFRLABEUOTSGJVDKCPMNZQWXY ',
     6  'AMKGHIWPNYCJBFZDRUSLOQXVET ',
     7  'GWTHSPYBXIZULVKMRAFDCEONJQ ',
     8  'NOZUTWDCVRJLXKISEFAPMYGHBQ ',
     9  'XPLTDSRFHENYVUBMCQWAOIKZGJ ',
    10  'UDNAJFBOWTGVRSCZQKELMXYIHP ',
    11  'MNBVCXZQWERTPOIUYALSKDJFHG ',
    12  'LVNCMXZPQOWEIURYTASBKJDFHG ',
    13  'JZQAWSXCDERFVBGTYHNUMKILOP ']
    14 
    15 for i in range(len(s)):
    16     s[i] = s[i].strip()
    17 
    18 key = [2,3,7,5,13,12,9,1,8,10,4,11,6]
    19 v = 'NFQKSEVOQOFNP'
    20 
    21 t = []
    22 #更换字符串的顺序
    23 for i in range(13):
    24     t.append(s[key[i]-1])
    25 print(t)
    26 
    27 u = []
    28 #改变每个字符串的排列顺序
    29 for i in range(13):
    30     new_sting = ''
    31     index = t[i].index(v[i])
    32     new_sting += t[i][index:] + t[i][0:index]
    33     u.append(new_sting)
    34 print(u)
    35 
    36 w = []
    37 #改变横纵方向方便查看,并修改为小写
    38 for i in range(26):
    39     new_sting = ''
    40     for j in range(13):
    41         new_sting += u[j][i].lower()
    42     w.append(new_sting)
    43 
    44 print(w)

    之后在得到的结果中找到一个可以看得懂的明文串即是 flag

     11、Normal_RSA

    下载得到两个文件

    需要运用到工具 openssl, rsatool, yafu

    1 openssl rsa -pubin -text -modulus -in warmup -in pubkey.pem

     得到 e, n ,之后由 yafu 分解得到 p, q

    1 python rsatool.py -o prikey.pem -e 65537 -p 319576316814478949870590164193048041239 -q 275127860351348928173285174381581152299

     得到 prikey.pem (自己命名的文件)后和 flag.enc 放在同一目录下,解密得到 flag

    1 openssl rsautl -decrypt -in flag.enc -inkey prikey.pem

    12、easy_ECC

    已知椭圆曲线加密Ep(a,b)参数为
    
    p = 15424654874903
    
    a = 16546484
    
    b = 4548674875
    
    G(6478678675,5636379357093)
    
    私钥为
    
    k = 546768
    
    求公钥K(x,y)

    借助 ECCTOOL  运算

    1 print(13957031351290+5520194834100)

  • 相关阅读:
    ATM+购物车
    subprocess,re,logging模块
    json,pickle,collections,openpyxl模块
    time,datatime,random,os,sys,hashlib模块
    1.内置函数剩余部分 map reduce filter 2.函数递归 3.模块
    生成器,面向过程编程,三元表达式,列表生成式,生成器表达式,匿名函数,内置函数
    Ajax数据对接出问题了?ThingJS解决方法在这里
    测试
    简单低成本的物联网开发平台-ThingJS
    用ThingJS之CityBuilder快搭3D场景,可视化开发必备
  • 原文地址:https://www.cnblogs.com/Tsuiyields/p/13762660.html
Copyright © 2011-2022 走看看