Пример #1
0
def decode(data, verbose=False):
    p = PrintCollector()
    detect(data, p)
    new_data = list(data)
    result_list = [[]]
    while len(new_data) > 0:
        t = new_data[:2]
        if len(t) < 2 or not (t[0] in string.digits and t[1] in string.digits):
            for x in result_list:
                x.append(t[0])
            new_data = new_data[1:]
            continue
        else:
            new_data = new_data[2:]

        # 因为 i 和 j 共用了一个编码,所以这里遍历所有可能
        special, c = decode_char(int(t[0]), int(t[1]))
        if special:
            tmp_result_list = deepcopy(result_list)
            for x in tmp_result_list:
                x.append('j')
            for x in result_list:
                x.append(c)
            result_list.extend(tmp_result_list)
        else:
            for x in result_list:
                x.append(c)

    new_result_list = []
    for x in result_list:
        x = ''.join(x)
        new_result_list.append(x)
        p.print(x)
    return p.smart_output(verbose=verbose)
Пример #2
0
def decode(data, verbose=False):
    p = PrintCollector()
    data = data.strip()
    split_list = data.split('0')
    data = [sum([int(t) for t in item]) for item in split_list]

    result = ''
    for i in data:
        result += string.ascii_uppercase[i - 1]
    p.print(result)
    return p.smart_output(verbose=verbose)
Пример #3
0
def decode(data, verbose=True):
    p = PrintCollector()
    for i in range(26):
        key = ''
        for x in data:
            s = ord(x)
            if (s not in range(97, 123)) and (s not in range(65, 91)):
                key = key + chr(s)
            else:
                # print chr(s)
                if s in range(97, 123):
                    if s % 2 == 0:
                        s = s - i
                        if s not in range(97, 123):
                            t = 97 - s
                            t = 123 - t
                            key = key + chr(t)
                        else:
                            key = key + chr(s)
                    else:
                        s = s + i
                        if s not in range(97, 123):
                            t = s - 122 + 96
                            key = key + chr(t)
                        else:
                            key = key + chr(s)
                else:
                    # print chr(s)
                    if s % 2 == 0:
                        s = s - i
                        if s not in range(65, 91):
                            t = 65 - s
                            t = 91 - t
                            key = key + chr(t)
                        else:
                            key = key + chr(s)
                    else:
                        s = s + i
                        if s not in range(65, 91):
                            t = s - 90 + 64
                            key = key + chr(t)
                        else:
                            key = key + chr(s)
        p.print(key)

    return p.smart_output(verbose=verbose)
Пример #4
0
def decode(e, verbose=False):
    p = PrintCollector()
    # e = 'tn c0afsiwal kes,hwit1r  g,npt  ttessfu}ua u  hmqik e {m,  n huiouosarwCniibecesnren.'
    data = len(e)
    field = []
    for i in range(2, data):
        if data % i == 0:
            field.append(i)

    result = []
    for f in field:
        b = data // f
        r = {x: '' for x in range(b)}
        for i in range(data):
            a = i % b
            r.update({a: r[a] + e[i]})
        d = ''
        for i in range(b):
            d = d + r[i]
        x = '%02d栏: %s' % (f, d)
        result.append(x)
        p.print(x)

    if len(field) == 0:
        p.print('字符串长度为质数,无法自动找到合适的栏数')

    return p.smart_output(result=result, verbose=verbose)
Пример #5
0
def caidao_decode(data, *args, **kwargs):
    p = PrintCollector()
    data_dict = query_str_2_dict(data.strip())
    d = {}
    for k, v in data_dict.items():
        v = unquote(v)
        try:
            x = force_bytes(v)
            missing_padding = len(v) % 4
            if missing_padding != 0:
                x += b'=' * (4 - missing_padding)

            d[k] = force_text(base64.decodebytes(x))
        except Exception as e:
            print(e)
            d[k] = v

    z0_raw = ''
    if 'z0' in d:
        z0_raw = d['z0']
        d['z0'] = ';\n'.join(d['z0'].split(';'))

    for k, v in d.items():
        value = '{}:\n{}\n'.format(k, v)
        p.print(value)
        if k == 'z0':
            if value != 'z0:\n{}\n'.format(z0_raw):
                p.print('z0_raw:\n{}\n'.format(z0_raw))

    return p.smart_output()
Пример #6
0
def decode(e):
    p = PrintCollector()
    # e = 'tn c0afsiwal kes,hwit1r  g,npt  ttessfu}ua u  hmqik e {m,  n huiouosarwCniibecesnren.'
    data = len(e)
    field = []
    for i in range(2, data):
        if data % i == 0:
            field.append(i)

    for f in field:
        b = data // f
        r = {x: '' for x in range(b)}
        for i in range(data):
            a = i % b
            r.update({a: r[a] + e[i]})
        d = ''
        for i in range(b):
            d = d + r[i]
        x = '分为\t' + str(f) + '\t' + '栏时,解密结果为: ' + d
        p.print(x)

    return p.all_output()
Пример #7
0
def decode(data, verbose=False):
    p = PrintCollector()
    data = data.replace(' ', '').replace('\t', '').strip()
    # if len(data) % 2 != 0:
    #     p.print('可能不是9宫格手机键盘编码')
    #     return p.smart_output(verbose=verbose)
    tmp_data = list(data)
    result = []
    while len(tmp_data) > 0:
        k = ''.join(tmp_data[:2])
        tmp_data = tmp_data[2:]
        v = dict_map.get(k)
        if v is None:
            v = ''
            # p.print('可能不是9宫格手机键盘编码')
            # return p.smart_output(verbose=verbose)

        result.append(v)

    result = ''.join(result)
    p.print(result)
    return p.smart_output(result, verbose=verbose)
Пример #8
0
def decode(data, verbose=False):
    p = PrintCollector()
    output = rail_fence_decode(data, verbose=False)
    for t in output:
        for key in range(26):
            d = caesar_decode(t, key)
            p.print(d)

    if len(output) == 0:
        p.print('字符串长度为质数,无法自动找到合适的栏数')

    return p.smart_output(verbose=verbose)
Пример #9
0
def decode_all(data, verbose=True):
    p = PrintCollector()
    for key in range(26):
        d = []
        for i, t in enumerate(data):
            k = (key + i) % 26
            r = decode(t, k)
            d.append(r)
        p.print(''.join(d))

    p.print('')
    for key in range(26):
        d = []
        for i, t in enumerate(data):
            k = (key + i) % 26
            r = encode(t, k)
            d.append(r)
        p.print(''.join(d))

    return p.smart_output(verbose=verbose)
Пример #10
0
def decode(data, verbose=False):
    p = PrintCollector()
    data = ''.join([t for t in data.lower() if t in ('a', 'b')])

    for mode in range(2):
        if mode == 0:
            # e_array = re.findall(".{5}", data)
            new_data = data
        else:
            # 互换 a 和 b
            p.print('-----------------')
            p.print('互换 a 和 b')
            new_data = ''.join(['b' if t == 'a' else 'b' for t in data])
            # e_array = re.findall(".{5}", new_data)

        decode_method_1(new_data, p)
        decode_method_2(new_data, p)
    return p.smart_output(verbose=verbose)
Пример #11
0
def decode(data, verbose=False):
    p = PrintCollector()
    # raw_data = "DEath IS JUST A PaRT oF lIFE, sOMeTHInG wE'RE aLL dESTInED TO dO."
    raw_data = data
    for mode in (0, 1):
        if mode == 0:
            p.print('\n小写为a,大写为b\n')
        else:
            p.print('\n小写为b,大写为a\n')

        new_data = recovery_transformed_bacon_data(p, raw_data, mode)

        # data = 'baabaaabbbabaaabbaaaaaaaaabbabaaaabaaaaa/abaaabaaba/aaabaabbbaabbbaababb'
        # 这种就直接解码
        # data = 'abbab_babbb_baaaa_aaabb'
        decode_method_1(new_data, p)
        decode_method_2(new_data, p)

    return p.smart_output(verbose=verbose)
Пример #12
0
def decode_all(data):
    p = PrintCollector()
    p.print('标准 qwerty 键盘')
    r = decode(data, dict_map1)
    p.print(r)
    p.print('\n从上到下,从左到右')
    r = decode(data, dict_map2)
    p.print(r)
    p.print('\nqwerty 逆序')
    r = decode(data, dict_map3)
    p.print(r)

    return p.all_output()
Пример #13
0
def decode_all(data, verbose=True):
    p = PrintCollector()
    for key in range(94):
        r = decode(data, key)
        p.print(r)
    return p.smart_output(verbose=verbose)
Пример #14
0
def decode(data):
    data = quopri.decodestring(data)
    p = PrintCollector()
    # 原始的数据可能是用不同的编码
    try:
        p.print('decode as utf8:')
        p.print(data)
    except:
        pass

    try:
        p.print('decode as gb2312:')
        p.print(data.decode('gb2312'))
    except:
        pass

    return p.all_output()
Пример #15
0
def char_count(data, *args, **kwargs):
    """
    字符频率统计
    """
    p = PrintCollector()
    r = Counter(data)
    length = len(data)
    data = [{'k': k, 'v': v} for k, v in r.items()]
    data1 = sorted(data, key=lambda a: a['v'], reverse=False)
    p.print('从小到大: ')
    for t in data1:
        k, v = t['k'], t['v']
        p.print('{}: {:.1f}%, {}'.format(k, v / length * 100, v))

    data2 = sorted(data, key=lambda a: a['v'], reverse=True)
    p.print('')
    p.print('从大到小: ')
    for t in data2:
        k, v = t['k'], t['v']
        p.print('{}: {:.1f}%, {}'.format(k, v / length * 100, v))

    return p.smart_output()
Пример #16
0
def decode(data):
    p = PrintCollector()
    d = decode_rot13(data)
    p.print(d)
    return p.all_output()
Пример #17
0
def decode(data, verbose=False):
    p = PrintCollector()
    d = pigpen_cipher(data)
    p.print(d)

    return p.smart_output(verbose=verbose)
Пример #18
0
def decode(data, verbose=False):
    p = PrintCollector()
    d = decode_rot13(data)
    p.print(d)

    return p.smart_output(verbose=verbose)
Пример #19
0
def decode_old(data, verbose=False):
    p = PrintCollector()
    data = ''.join([t for t in data.lower() if t in ('a', 'b')])

    for mode in range(2):
        if mode == 0:
            e_array = re.findall(".{5}", data)
        else:
            # 互换 a 和 b
            p.print('-----------------')
            p.print('互换 a 和 b')
            new_data = ''.join(['b' if t == 'a' else 'b' for t in data])
            e_array = re.findall(".{5}", new_data)

        d_string1 = ""
        d_string2 = ""
        for index in e_array:
            for i in range(0, 26):
                if index == first_cipher[i]:
                    d_string1 += alphabet[i]
                if index == second_cipher[i]:
                    d_string2 += alphabet[i]

        p.print("first method: \n" + d_string1)
        p.print("\nsecond method: \n" + d_string2)
    return p.smart_output(verbose=verbose)
Пример #20
0
def decode(data, verbose=False):
    if len(data) % 4 != 0:
        data = data + '=' * (4 - len(data) % 4)

    p = PrintCollector()
    p.print('base64:')
    r = b64decode(force_bytes(data))
    p.print(smart_text(r))

    p.print('\nrot13->base64:')
    r = b64decode(force_bytes(decode_rot13(data)))
    p.print(smart_text(r))

    new_data = []
    for t in data:
        if t in string.ascii_lowercase:
            t = t.upper()
        elif t in string.ascii_uppercase:
            t = t.lower()
        new_data.append(t)
    r = ''.join(new_data)
    p.print('\nswap_case->base64:')
    r = b64decode(force_bytes(r))
    p.print(smart_text(r))

    new_data = data[::-1]
    new_data = new_data.lstrip('=')
    if len(new_data) % 4 != 0:
        new_data = new_data + '=' * (4 - len(new_data) % 4)
    r = b64decode(force_bytes(new_data))
    p.print('\nreverse->base64:')
    p.print(smart_text(r))

    return p.smart_output(verbose=verbose)
Пример #21
0
def decode_all(data, verbose=True):
    p = PrintCollector()
    for key in range(26):
        r = decode(data, key)
        p.print(r)
    return smart_output(p.collector, verbose, p)
Пример #22
0
def decode(data, verbose=False):
    data = quopri.decodestring(data)
    p = PrintCollector()
    # 原始的数据可能是用不同的编码
    try:
        p.print('decode as utf8:')
        p.print(data)
    except:
        pass

    try:
        p.print('decode as gb2312:')
        p.print(data.decode('gb2312'))
    except:
        pass

    return p.smart_output(verbose=verbose)
Пример #23
0
def decode(data, verbose=False):
    """
    这个网站的实现中 http://web.chacuo.net/charsetxxencode/
    每60个字符输出一行,然后在开始位置加上1个字符存储长度
    :param verbose:
    :param data:
    :return:
    """
    p = PrintCollector()
    result = []

    data = data.replace('\n', '').replace(' ', '').strip()
    # print(data)
    length = 61
    data_list = []
    while len(data) > 0:
        data_list.append(data[:length])
        data = data[length:]

    for t in data_list:
        length = cipher_letters.index(t[0])
        # print(length)
        result.append(decrypt(t[1:], length, print_output=False))

    # result = [force_bytes(t) for t in result]
    output = b''.join(result)
    print(output)
    try:
        p.print('utf8编码:')
        p.print(output)
    except:
        pass

    try:
        p.print('gb2312编码:')
        p.print(output.decode('gb2312'))
    except:
        pass

    return p.smart_output(verbose=verbose)
Пример #24
0
def decode_all(data, verbose=False):
    p = PrintCollector()
    p.print('标准 qwerty 键盘')
    r = decode(data, dict_map1)
    p.print(r)
    p.print('\n从上到下,从左到右')
    r = decode(data, dict_map2)
    p.print(r)
    p.print('\nqwerty 逆序')
    r = decode(data, dict_map3)
    p.print(r)

    return p.smart_output(verbose=verbose)