学习提升模版Python

python 进行进制转换的脚本编写

2020-01-11  本文已影响0人  pigdaqiang

python 在ctf进制转换的应用

  1. 4进制转换(题目来源bugku)

    进制字符串如下:

    1212 1230 1201 1213 1323 1012 1233 1311 1302 1202 1201 1303 1211 301 302 303 1331

    由于是4进制,满4进一,从右往左依次对应4的0,1,2,3.....次方

    列如:1212 转换为10进制

    1 × 4^3 + 2 × 4^2 + 1 × 4^1 + 2 × 4^0 = 64 + 32 + 4 + 2 = 102

    所以python脚本如下:

    #!/usr/bin/python
    # -*- coding=utf8 -*-
    """
    # @Author : pig
    # @CreatedTime:2020-01-10 22:39:14
    # @Description : 
    """
    
    
    m = ""
    with open("4_进制.txt", "r") as f:
        text = f.read()
        c = text.split(" ")
        for i in c:
            temp = 0
            for j in range(len(i)):
                temp += int(i[j]) * (4 ** (len(i) - j -1))
            m += chr(temp)
        print (m)
    

    结果如下:

    flag{Fourbase123}

  2. 8进制转换(题目来源iscc 2019)

    题目如下:

    0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 01
    11 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121 060 0116 067 0124
    0152 0102 0146 0115 0107 065 0154 0130 062 0116 0150 0142 0154 071 0172 0144 0
    104 0102 0167 0130 063 0153 0167 0144 0130 060 0113

    通篇都是8进制,这次利用python int自带的函数来解决

    int(126, 8) # 将8进制转换为10进制

    转换脚本如下:

    #!/usr/bin/python
    # -*- coding=utf8 -*-
    """
    # @Author : pig
    # @CreatedTime:2020-01-11 15:46:57
    # @Description : 
    """
    
    
    import base64
    m = ""
    with open("message_进制.txt", "r") as f:
        text = f.read()
        c = text.split(" ")
        for i in c:
            try:
                m += chr(int(str(i)[1:],8))
            except ValueError:
                pass
        print (m)
    result = base64.b64decode(m.encode('utf-8'))
    print (str(result, 'utf-8'))
    

    由于第一次解密得到一连串个的base64字符串,所以再加一个base64解密

    base64.b64decode(字符串) # 解密base64字符串

    最后结果如下:

    V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K
    Well done!
    
     Flag: ISCC{N0_0ne_can_st0p_y0u}
    
    
  3. 多种进制混合(题目来源2017 山东省赛科莱杯)

    题目如下:

    d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100
    o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101
    d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151
    x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98
    d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b11000
    11 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d
    125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o
    164 b1101001 x6d o145 x7e

    有题目得知 d为十进制,x为十六进制,o为8进制,b为二进制

    所以脚本编写如下:

    #!/usr/bin/python
    # -*- coding=utf8 -*-
    """
    # @Author : pig
    # @CreatedTime:2020-01-11 16:08:14
    # @Description : 
    """
    
    f = open('kelai_进制转换.txt', 'r')
    text = f.read().split(' ')
    m = ''
    for i in text:
        if i[0] == 'd':
            m += chr(int(i[1:]))
        if i[0] == 'x':
            m += chr(int(i[1:], 16))
        if i[0] == 'o':
            m += chr(int(i[1:], 8))
        if i[0] == 'b':
            m += chr(int(i[1:], 2))
    print (m)
    

    得到结果如下:

    Welcome to kelaibei. Give you a flag as a gift. flag{1e4bf81a6394de5abc005ac6e39a387b} . Have a good time~

上一篇下一篇

猜你喜欢

热点阅读