能夠用在CTF中的base系列解碼程序

base系列解碼程序

因爲在ctf比賽中常常會遇到base系列的編碼,很差判斷是哪一種類型,因而本身編寫了一個解碼程序(少了base36和base128),不須要去網上找了(並且有些還收費)python

#coding:utf-8
import base64,base36,base58,base91,base92,base62
import binascii
import re
def base_decode(n):
    m=''
    flag=False

    try:
        if re.search('[a-e]',n):
            m=base64.b16decode(n,True)
        else:
            m=base64.b16decode(n)
    except binascii.Error:
        pass
    else:
        flag=True
        print("base16deocde:",m)
        return flag
    #'''''''''''''''''''''''''''''''''
    try:        
        m=base64.b32decode(n)
    except binascii.Error:
        pass
    else:
        flag=True
        print("base32deocde:",m)
        return flag
    #'''''''''''''''''''''''''''''''''    
    try:
        m=base58.b58decode(n)
    except    ValueError:
        pass
    else:
        m=str(m)[2:-1]
        if '\\x' in m:
            pass
        else:
            flag=True
            print("base58deocde:",m)
            mm=str(base91.decode(n))
            if '\\x' not in mm:
                print("maybe base91decode:",mm)
            return flag
    #'''''''''''''''''''''''''''''''''
    try:
        m=base62.decodebytes(n)
    except    ValueError:
        pass
    else:
        m=str(m)
        if '\\x' in m:
            pass
        else:        
            flag=True
            print("base62deocde:",m)
            return flag
    #'''''''''''''''''''''''''''''''''    
    try:
        m=base64.b64decode(n)
    except binascii.Error:
        pass
    else:
        m=str(m)
        if '\\x' in m:
            pass
        else:
            flag=True
            print("base64deocde:",m)
            return flag
    #'''''''''''''''''''''''''''''''''
    try:
        m=base64.b85decode(n)
    except ValueError:
        pass
    else:
        m=str(m)
        if '\\x' in m:
            pass
        else:    
            print("base_b85deocde:",m)
            flag=True
            return flag
    #'''''''''''''''''''''''''''''''''
    try:
        m=base64.a85decode(n)
    except ValueError:
        pass
    else:
        m=str(m)
        if '\\x' in m:
            pass
        else:
            print("base_a85deocde:",m)
            flag=True
            return flag
    #'''''''''''''''''''''''''''''''''
    try:
        m=base91.decode(n)    
    except ValueError:
        pass
    else:
        m=str(m)
        if '\\x' in m:
            pass
        else:
            print("base91deocde:",m)
            flag=True
            return flag
    #'''''''''''''''''''''''''''''''''
    try:
        m=base92.decode(n)
    except ValueError:
        pass
    else:
        flag=True
        print("base92deocde:",m)
        return flag
    return flag
    #'''''''''''''''''''''''''''''''''


if __name__=='__main__':
    print("******There are no base36 and base128******")
    while(1):
        x=input("input the string(q to quit):")

        if x=='q':
            break
        a=base_decode(x)
        if a==True:
            print('\n')
        else:
            print("Fail")

在代碼中所涉及到的base編碼系列應該都能解碼。ui

有發現錯誤請你們提出。編碼

安裝

pip install base58
pip install base91
pip install base92
pip install pybase62

關於base92模塊在python3中會出錯的問題

python官網提供的pypi是基於python2的,在python3裏運行會報錯,下面提供了修改方法。spa

具體改法:

  • 將base92文件夾裏的__init__.py中的base92改成.base92

捕獲2.PNG

  • 修改base92文件夾裏的base92.pycode

    • 111行:basestring改成str
      捕獲1.PNG
    • 12二、135和163行:/改成//,如
      捕獲.PNG
相關文章
相關標籤/搜索