Base16编码

Base16简介

Base16编码使用16个ASCII可打印字符(数字0-9和字母A-F)对任意字节数据进行编码。

Base16先获取输入字符串每个字节的二进制值(不足8比特在高位补0),然后将其串联进来,再按照4比特一组进行切分,将每组二进制数分别转换成十进制,在下述表格中找到对应的编码串接起来就是Base16编码。

可以看到8比特数据按照4比特切分刚好是两组,所以Base16不可能用到填充符号“=”。

Base16编码后的数据量是原数据的两倍:1000比特数据需要250个字符(即 250*8=2000 比特)。换句话说:Base16使用两个ASCII字符去编码原数据中的一个字节数据。

a s d f
ASCII 97 115 100 102
hex 0x61 0x73 0x64 0x66
Base16 61 73 64 66

识别编码方式

注意

Base64、Base32、Base16编码的识别关键:

Base64 : A-Z、a-z、0-9、+、/以及小于等于两个等号

Base32 : A-Z、2-7以及补位的等号

Base16 : 0-9、A-F

例题

混合编码

例题

请解码以下字符串: R1pDVE1NWlhHUTNETU4yQ0dZWkRNTUpYR00zREtNWldHTTJES1JSV0dJM0RDTlpUR1kyVEdNWlRHSTJVTU5SUkdaQ1RNTkJWSVkzREVOUlJHNFpUTU5KVEdFWlRNTjJF

首先尝试Base64解码(因为编码后的数据有大小写之分)

Base64解码:GZCTMMZXGQ3DMN2CGYZDMMJXGM3DKMZWGM2DKRRWGI3DCNZTGY2TGMZTGI2UMNRRGZCTMNBVIY3DENRRG4ZTMNJTGEZTMN2E
我们再对解码后的数据使用Base32解码(因为编码后的数据只有大写字母和数字)
Base32解码:6E6374667B6261736536345F6261736533325F616E645F6261736531367D
再使用Base16解码即可(因为编码后的数据只有0-9、A-F)
Base16解码:nctf{base64_base32_and_base16}nctf{base64_base32_and_base16}


循环编码

例题

请解码以下字符串:

GM2DINJTGUZTIMZUGM4TGNZUGEZTINBUGM2TGNBTGUZTEMZUGMZDGNBUGUZTIMZUGM2DGOJTGMZTCMZUGQ2TGNRUGEZTKMZRGMZTGMJTGQ2DKMZXGQYTGNJTGEZTGMZRGM2DINBTGY2DCMZVGM2TGNZUGEZTINBVGM3DIMRTGQ2DIMZTGMYTGNBUGUZTMNBRGM2TGMRTGQZTEMZUGQ2TGNJTGQZTKMZZGMZTGMJTGQ2DKMZUGM2DGNJTGIZTIMZSGM2DINJTGQZTIMZVGM2TGMZTGEZTINBVGM2DGNBTGUZTKMZTGMYTGNBUGQZTONBRGM2TGNJTGMZTAMZUGQ2DGNZUGEZTKMZVGMZTGMRTGQ2DKMZWGQZDGNBTHEZTGMZSGM2DINJTGQZTIMZVGM2TGMZTGIZTINBVGM2DGNJTGUZTCMZXGQYTGNBUGQZTKMZUGM2TGNJTG4ZTSMZUGQ2TGNBTGUZTIMZVGMZTGMJTGQ2DKMZUGM2DGNJTGUZTGMZSGM2DINJTG42DCMZUGMYTGMZTGEZTINBVGM3DIMJTGUZTKMZXGQYTGNBUGUZTKMZUGM2TGNJTGMZTCMZUGQ2TGNJTGQZTMMZTGMZTGNJTGQ2DKMZVGM2DGNBTHEZTGMZRGM2DINJTGUZTIMZVGM4TGMZTGAZTINBVGM2DGNJTGUZTSMZTGMYTGNBUGQZTKMZUGM2DINBTG4ZTOMZUGQ2TGNBTGUZTIMZVGMZTGMBTGQ2DMMZUGM2DGNJTGUZTGMZRGM2DINJTGY2DEMZUGM4TGMZTGAZTKMZRGM2TGNBTGUZTCMZTGMYTGNBUGUZTKMZUGM2DINBTGMZTCMZUGQ2TGNJTGQZTINBUGMZTGMJTGQ2DKMZUGM2DGNBUGQZTGMZRGM2DINJTGY2DCMZVGM2TGMZTGEZTINBVGM3DIMJTGQ2DIMZXGQYTGNBUGQZTIMZUGM2TGMRTGQZTKMZUGQ2TGNRUGIZTINBUGMZTGMJTGQ2DIMZWGQYTGNJTGIZTIMZSGM2DINJTGUZTIMZVGMYTGMZTGEZTINBVGM3DIMJTGYZTGMZXGM3TGNBUGUZTKMZUGM2TGMJTGMZTCMZUGQ2DGNRUGEZTINBUGM3TGOBTGQ2DKMZUGM2TGNBTGUZTGMZQGM2DINBTG42DCMZVGM2TGNZTHEZTINBVGM2DGNBTGUZTKMZTGMZDGNJTGEZTONBRGM2TGNJTG4ZTSMZUGQ2TGNJTGQZTKMZVGMZTGMRTGUZTCMZXGQYTGNJTGUZTGMZSGM2DINJTGQZTIMZWGM3TGMZTGEZTINBVGM3TIMJTGUZTKMZTGMYDGNBUGUZTIMZVGM2DGNJTGMZTAMZUGQ2TGNRUGEZTKMZVGM3TGOJTGQ2DIMZXGQYTGNBTGEZTONBRGM2DINJTGUZTIMZVGMZDGNBTGMZTINBVGM2TGNBTGUZTSMZTGMYTGNBUGUZTKMZUGM2TGOJTGMZTAMZUGQ2TGNJTGQZTIMZZGMZTGMBTGUZTEMZVGM2DGNJTGEZTGMZSGM2DINJTGUZTIMZUGM4TGMZTGAZTKMZRGM3TIMJTGUZTKMZTGMYDGNBUGUZTMNBSGM2DINBTGMZTGMZUGQ2DGNBTGQZTKMZVGMZTGMZTGQ2DKMZVGM2DGNBTHEZTONBRGM2DINBTGQZTIMZUGQ2DGNZTG4ZTINBVGM3TIMJTGY2DEMZTGMYTGNBUGQZTMNBRGM2TGMJTGMZTCMZUGQ2TGNZUGEZTKMZRGMZTGMBTGUZTEMZWGQYTGNJTGUZTOMZYGM2DINBTG42DCMZUGMYTGMZTGAZTKMZSGM2TGNBTGUZTCMZTGM2DGNBUGUZTKMZUGM2TGNJTGMZTCMZUGQ2TGNRUGEZTMMZTGM3TGNZTGQ2DKMZUGM2DGNJTGUZTGMZRGM2DINBTG42DCMZVGM2TGMZTGEZTINBUGM3TIMJTGY2DEMZTGMYDGNBUGQZTONBRGM2TGNJTGMZTEMZUGQ2TGNJTGQZTKMZVGMZTGMRTGQ2DKMZUGM2DGNJTGYZTIMZSGM2DINJTGQZTKMZVGMYTGMZTGIZTKMZRGM3DIMJTGUZTKMZTGMZDGNBUGUZTIMZVGM2DGNJTGMZTCMZUGQ2TGNBTGQZTKNBRGM2DGMZTGQ2DKMZXGQYTGNBTGEZTGMZRGM2DINJTG42DCMZVGM2TGNZTHEZTINBUGM3TIMJTGQZTKMZTGMYDGNBUGUZTMNBRGM2TGOJTG4ZTQMZUGQ2TGNJTGQZTKMZZGMZTGMBTGQ2DKMZVGM2DGNRTGMZTGMZQGM2DINJTGUZTIMZUGMYTGMZTGEZTINBUGM2TGNBTGU2DCMZUGM2DGNBUGUZTKMZUGM2TGOJTGMZTAMZUGQ3DGNBTGQZTKMZSGM2DGNRTGQ2DKMZUGM2DGNJTGEZTGMZQGM2TGMJTGUZTIMZVGMYTGMZTGEZTINBVGM2TGNBTGUZTKMZXGQYTGNBUGQZTIMZUGM2DINBTGMZTCMZUGQ2TGNBTGUZTINBUGMZTGMJTGQ2DIMZVGM2DGNJUGEZTIMZTGM2DINJTGY2DCMZVGMYTGMZTGEZTINBUGM3DIMJTGUZTEMZUGM2TGNBUGUZTMNBSGM2DINBTGMZTCMZUGQ2DGNRUGEZTKMZSGM2DGNBTGQ2DKMZVGM2DGNJTGEZTONBRGM2DINBTGQZTIMZWGMZTGNZTG4ZTINBVGM2TGNBTGYZTGMZTGMYTGNBUGQZTMNBRGM3DGNBTGQZTEMZUGQ2TGNJTGQZTIMZVGMZTGMZTGQ2DMMZVGM2DGNJTGUZTOMZZGM2DINJTGUZTIMZVGM2TGMZTGEZTINBVGM3DIMJTGUZTEMZUGM3TGNBUGUZTKMZUGM2DGNJTG42DCMZUGQ2DGNBTGQZTKMZWGM2DGMRTGQ2DKMZUGM2DGNRTG4ZTGMZRGM2DINJTGUZTIMZVGQYTGNBTGMZTINBVGM2DGNJTGQZTKMZTGMYDGNBUGUZTKMZUGM2TGNJTG42DCMZUGQ2DGNZUGEZTIMZVGMZTGMBTGQ2DKMZWGQYTGNJTGIZTIMZTGM2DINJTGUZTIMZVGM4TGMZTGEZTINBVGM2TGNBTGU2DCMZUGM2DGNBUGUZTIMZUGM2TGOJTGMZTAMZVGMZDGNBTGQZTKNBRGM2DGNBTGQ2DKMZVGM2DGNBTHEZTGMZQGM2TGMJTG42DCMZVGM2TGMZTGAZTINBVGM3DIMRTGQZTSMZTGMYDGNJTGIZTKMZUGM2TGMJTGMZTEMZUGQ2TGNJTGQZTIMZZGM3TIMJTGQ2DIMZVGM2DGNJTGIZTIMZSGM2DINJTGQZTIMZVGMYTGMZTGEZTINBVGM3DIMJTGUZTCMZTGMYTGNBUGUZTONBRGM2TGMJTGMZTAMZVGMZDGNJTGQZTKMZVGMZTGMZTGQ2DKMZWGQZDGNBUGQZTGMZRGM2TGMJTGUZTIMZVGMZDGNBTGIZTINBVGM2TGNBTGQZTSMZTGMYTGNBUGUZTIMZUGM2TGMRTGQZTEMZUGQ2TGNBTGQZTKMZZGMZTGMJTGQ2DIMZWGQYTGNJTGUZTGMZRGM2DINBTG42DCMZVGM2TGMZTGAZTKMZRGM3DIMJTGUZTKMZTGMYTGNBUGQZTONBRGM2DGMJTGMZTEMZUGQ2TGNBTGQZTKMZVGM3TGOJTGQ2DKMZVGM2DGNRTGMZTGMZSGM2TGMJTGY2DCMZVGM2TGNZTHEZTINBVGM2DGNJTGQZTKMZTGMYTGNBUGUZTIMZUGM2TIMJTGQZTGMZUGQ2TGNZUGEZTIMZRGMZTGMJTGQ2DKMZVGM2DGNJTGUZTOMZZGM2DINBTG42DCMZUGM2TGMZTGIZTKMZRGM3DIMJTGYZTGMZTGM2TGNBUGUZTKMZUGM2TGOJTGMZTAMZUGQ2TGNJTGQZTKNBRGM2DGNBTGQ2DKMZUGM2TGNJTHEZTGMZRGM2DINBTG42DCMZVGQYTGNBTGQZTINBVGM2TGNBTGQZTSMZTGMYDGNBUGYZTIMZUGM2TGNJTGMZTEMZUGQ2TGNJTGQZTKMZRGMZTGMBTGUZTCMZVGM2DGNJTGEZTGMZRGM2DINJTGUZTIMZUGQ2DGMZTGEZTINBVGM3DIMJTGUZTCMZTGMZDGNBUGUZTKMZUGM2DINBTGMZTCMZUGQ2TGNRUGEZTKNBRGM2DGMZTGQ2DKMZWGQYTGNJTGEZTGMZQGM2TGMJTGUZTIMZVGMZDGNBTGUZTINBVGM3DIMRTGQZTSMZTGMYTGNBUGQZTMNBRGM2TGNJTG4ZTOMZUGQ2TGNJTGQZTKMZRGMZTGMRTGUZTCMZWGQYTGNRTGMZTOMZXGM2DINJTGUZTIMZWGMZTGMZTGEZTINBUGM3DIMJTGQ2DIMZXGM3TGNBUGQZTONBRGM2DGMJTGMZTGMZUGQ3DGNJTGQZTKMZVGM3TGOJTGQ2DKMZUGM2DGNJTGUZTGMZTGM2DINJTGQZTIMZVGMZDGNBTGYZTINBVGM2TGNBTGQ2DIMZTGMZDGNJTGEZTONBRGM2TGNRTGQZTEMZUGQ2TGNBTGUZTIMZVGMZTGMJTGQ2DIMZWGQYTGNJTGUZTGMZQGM2DINJTGQZTKMZUGM2TGMZTGEZTINBVGM2TGNBTGUZTKMZTGMYTGNBUGUZTKMZUGM2TGNJTG42DCMZUGQ2TGNJTGQZTKMZRGMZTGMBTGQ2DKMZVGM2DGNBTGUZTGMZSGM2TGMJTGY2DCMZVGM4TGMZTGAZTINBVGM2TGNBTGUZTSMZTGMYDGNJTGIZTIMZUGM2DINBTG4ZTOMZUGQ2TGNJTGQZTIMZZGMZTGMBTGUZTCMZVGM2DGNJTGUZTGMZRGM2DINJTGUZTIMZVGM4TGMZTGMZTINBUGM2DGNBTGUZTKMZTGMZDGNBUGUZTKMZUGM2DGOJTG42DCMZUGQ2DGNJTGQZTKNBRGM2DGMZTGQ2DKMZXGQYTGNRUGIZTGMZRGM2DINJTGY2DCMZVGMYTGMZTGEZTINBVGM2DGNJTGUZTKMZTGMYDGNJTGIZTMNBRGM2TGNJTG42DCMZUGQ2TGNRUGIZTINBUGMZTGMBTGUZTEMZVGM2DGNJTGEZTGMZUGM2DINJTGUZTIMZVGMYTGMZTGEZTINBVGM3DIMJTGYZTGMZXGM3TGNBUGUZTIMZUGM2TGNJTGMZTCMZUGQ2DGNZUGEZTKMZVGMZTGMJTGQ2DIMZXGQYTGNRUGIZTGMZQGM2DINBTG42DCMZVGM2TGMZTGIZTINBVGM2TGNBTGUZTKMZTGMZDGNBUGQZTONBRGM2DINBTG4ZTOMZUGQ2TGNBTGUZTKMZRGMZTGMRTGUZTCMZWGQYTGNJTGUZTGMZSGM2DINJTGQZTKMZUGM2TGMZTGEZTINBVGM2DGNBTGU2DCMZUGMZTGNBUGUZTONBRGM2TGMJTGMZTAMZUGQ2DGNZUGEZTKMZVGM3TGOJTGQ2DIMZXGQYTGNBTGUZTGMZRGM2DINJTGUZTIMZWGMZTGMZTGUZTINBVGM2TGNBTGUZTSMZTGMYDGNBUGUZTKMZUGM2TIMJTGQZTIMZUGQ2TGNJTGQZTIMZZGMZTGMJTGQ2DKMZVGM2DGNJUGEZTIMZUGM2DINJTGUZTKMZUGM2TGMZTGAZTINBWGM2DGNBTGUZTKMZTGMYTGNBUGUZTKMZUGM2TGMJTGMZTAMZVGMYTGNJTGQZTKMZRGMZTGMRTGQ2DKMZVGM2DGNBTHEZTGMZRGM2DINJTGUZTIMZUGQ2DGMZTGEZTINBVGM2DGNJTGQZTSMZTGMYTGNBUGUZTONBRGM2TGMJTGMZTCMZUGQ2TGNRUGEZTKMZRGMZTGMJTGQ2DIMZWGQYTGNJTGIZTIMZVGM2DINBTG42DCMZUGM2TGMZTGEZTINBUGM3DIMJTGUZTEMZUGM2DGNBUGUZTKMZUGM2TGNJTGMZTCMZUGQ2TGNJTGQZTMMZTGM3TGNZTGQ2DKMZVGM2DGNJTHEZTGMZRGM2DINBTG42DCMZVGMYTGMZTGEZTINBVGM2TGNBTGUZTKMZTGMZTGNBUGYZTKMZUGM2TGNJTGMZTEMZUGQ2TGNBTGQZTKMZVGMZTGMRTGUZTCMZXGQYTGNJTGIZTIMZWGM2DINJTGUZTIMZWGMZTGMZTGIZTKMZRGM3TIMJTGUZTEMZUGM3DGNBUGUZTIMZUGM3DGNZTGMZTCMZUGQ2TGNRUGEZTKMZVGMZTGMRTGQ2DKMZWGQZDGNBUGQZTGMZQGM2DINJTGUZTIMZVGM2TGNZUGEZTINBVGM2TGNBTGUZTSMZTGMYDGNBUGUZTMNBRGM2TGMRTGQZTGMZUGQ2TGNJTGQZTKMZZGMZTGMBTGQ2DKMZVGM2DGNJTHEZTGMZQGM2DINJTGUZTIMZVGM4TGMZTGAZTKMZSGM2DGNBTGU2DCMZUGMZTGNBUGUZTKMZUGM2DGOJTGMZTCMZUGQ2DGNRUGEZTKMZVGMZTGMBTGQ2DKMZWGQZDGNBTHEZTGMZTGM2DINBTGQZTIMZVGM2TGMZTGMZTINBVGM2TGNBTGQZTSMZXGQYTGNBUGQZTIMZUGM2DINBTGMZTCMZUGQ2TGNBTGQZTKMZRGMZTGMJTGQ2DIMZWGQYTGNJTGEZTGMZRGM2DINJTGY2DCMZVGMYTGMZTGEZTINBUGM3TIMJTGUZTKMZXGM4DGNBUGUZTMNBSGM2DINBTGMZTCMZUGQ2DGNRUGEZTKMZSGM2DGMRTGQ2DKMZVGM2DGNJTGUZTGMZRGM2DINJTGY2DCMZWGMZTGNZTG4ZTINBVGM2TGNBTGUZTSMZTGMYTGNBUGQZTONBRGM2TGNJTGMZTCMZUGQ2DGNZUGEZTIMZRGMZTGMZTGQ2DMMZVGM2DGNJTGUZTOMZZGM2DINJTGUZTIMZVGM2TGMZTGIZTINBVGM2DGNBTGUZTEMZUGM3TGNBUGUZTKMZUGM2DGNJTG42DCMZUGQ2DGNBTGQZTKMZRGMZTGMJTGQ2DIMZXGQYTGNRUGIZTGMZRGM2DINBTGQZTIMZVGM2TGMZTGAZTINBUGM3TIMJTGQZTCMZXGQYTGNBUGYZTKMZRGMZTINBTGM2DI===

解码脚本:

import base64

fr = open('subject.txt')
string = fr.readline()
fr.close()

def deCodeBase(string):
    try:
        string = base64.b16decode(string)
        return deCodeBase(string)
    except:
        try:
            string = base64.b32decode(string)
            return deCodeBase(string)
        except:
            try:
                string = base64.b64decode(string)
                return deCodeBase(string)
            except:
                return string

print deCodeBase(string)