二进制转布莱叶盲文转义

willingyut / 2023-08-26 / 原文

s为二进制数据,脚本使用python3运行

TYPE_HEX = 0
TYPE_ASCII = 1
TYPE_BINARY = 2
TYPE_BRAILLE = 3

with open('lookup_table.txt', 'r') as f:
    rows = f.read().splitlines()
table = list(map(lambda x: x.split('\t'), rows))

def convert(text_array, in_type=TYPE_BINARY, out_type=TYPE_ASCII, sep=''):
    output = []

    input_table = list(map(lambda x: x[in_type], table))
    output_table = list(map(lambda x: x[out_type], table))

    for item in text_array:
        index = input_table.index(item.upper())
        output.append(output_table[index])

    return sep.join(output)

s='100100011100010100100100011110110100000111110001101001100100110000111010001111100110010100111000111000001111100100000101011111'
x = []
for i in range(0,len(s),6):
    x.append(s[i:i+6])

y=convert(x, TYPE_BINARY, TYPE_BRAILLE)
print(y)
#⠉⠎⠊⠉⠞⠋⠸⠣⠥⠉⠃⠗⠼⠙⠊⠇⠇⠼⠉⠨⠾ z
=convert(y, TYPE_BRAILLE, TYPE_HEX) print(z)
#4353494354465F3C554342522344494C4C23432E29
print(bytes.fromhex(z).decode())
#CSICTF_<UCBR#DILL#C.)

输入结果为CSICTF_<UCBR#DILL#C.),实际上需要转换,将所有的大写转成小写,'_>'转成'{','.)'转成'}',#C对应3,#D对应4,如此类推

即结果为csictf{ucbr4ill3}