尝试将十六进制列表从 binascii 转换为文本

Trying to convert a hex list from binascii to text

我一直在尝试转换这个列表:

[54, 57, 54, 100, 55, 48, 54, 102, 55, 50, 55, 52, 50, 48, 54, 102, 55, 51, 48, 100, 48, 97, 54, 54, 54, 57, 54, 99, 54, 53, 50, 48, 51, 100, 50, 48, 54, 102, 55, 48, 54, 53, 54, 101, 50, 56, 50, 55, 55, 52, 54, 53, 55, 51, 55, 52, 50, 101, 55, 48, 55, 57, 50, 55, 50, 99, 50, 48, 50, 50, 55, 50, 54, 50, 50, 98, 50, 50, 50, 57, 48, 100, 48, 97, 55, 48, 55, 50, 54, 57, 54, 101, 55, 52, 50, 56, 54, 54, 54, 57, 54, 99, 54, 53, 50, 57, 48, 100, 48, 97, 54, 54, 54, 57, 54, 99, 54, 53, 50, 101, 55, 51, 54, 53, 54, 53, 54, 98, 50, 56, 51, 48, 50, 57, 48, 100, 48, 97, 55, 51, 55, 52, 54, 49, 55, 50, 55, 52, 52, 50, 55, 57, 55, 52, 54, 53, 50, 48, 51, 100, 50, 48, 51, 48, 48, 100, 48, 97, 54, 53, 54, 101, 54, 52, 52, 50, 55, 57, 55, 52, 54, 53, 50, 48, 51, 100, 50, 48, 51, 52, 51, 51, 51, 48, 48, 100, 48, 97, 54, 50, 55, 57, 55, 52, 54, 53, 55, 51, 50, 48, 51, 100, 50, 48, 50, 50, 50, 50, 48, 100, 48, 97, 54, 50, 54, 57, 54, 101, 52, 50, 55, 57, 55, 52, 54, 53, 50, 48, 51, 100, 50, 48, 50, 50, 50, 50, 48, 100, 48, 97, 55, 55, 54, 56, 54, 57, 54, 99, 54, 53, 50, 48, 55, 51, 55, 52, 54, 49, 55, 50, 55, 52, 52, 50, 55, 57, 55, 52, 54, 53, 50, 48, 50, 49, 51, 100, 50, 48, 54, 53, 54, 101, 54, 52, 52, 50, 55, 57, 55, 52, 54, 53, 51, 97, 48, 100, 48, 97, 50, 48, 50, 48, 50, 48, 50, 48, 54, 50, 55, 57, 55, 52, 54, 53, 53, 52, 54, 102, 52, 49, 54, 52, 54, 52, 50, 48, 51, 100, 50, 48, 55, 51, 55, 52, 55, 50, 50, 56, 54, 54, 54, 57, 54, 99, 54, 53, 50, 101, 55, 50, 54, 53, 54, 49, 54, 52, 50, 56, 55, 51, 55, 52, 54, 49, 55, 50, 55, 52, 52, 50, 55, 57, 55, 52, 54, 53, 50, 57, 50, 57, 48, 100, 48, 97, 50, 48, 50, 48, 50, 48, 50, 48, 54, 50, 55, 57, 55, 52, 54, 53, 53, 52, 54, 102, 52, 49, 54, 52, 54, 52, 50, 48, 51, 100, 50, 48, 54, 50, 55, 57, 55, 52, 54, 164, 53, 52, 54, 102, 52, 49, 54, 52, 54, 52, 50, 101, 55, 50, 54, 53, 55, 48, 54, 99, 54, 49, 54, 51, 54, 53, 50, 56, 50, 50, 54, 50, 50, 55, 50, 50, 50, 99, 50, 48, 50, 50, 50, 50, 50, 57, 48, 100, 48, 97, 50, 48, 50, 48, 50, 48, 50, 48, 54, 50, 55, 57, 55, 52, 54, 53, 53, 52, 54, 102, 52, 49, 54, 52, 54, 52, 50, 48, 51, 100, 50, 48, 54, 50, 55, 57, 55, 52, 54, 53, 53, 52, 54, 102, 52, 49, 54, 52, 54, 52, 50, 101, 55, 34, 54, 53, 55, 48, 54, 99, 54, 49, 54, 51, 54, 53, 50, 56, 50, 50, 50, 55, 50, 50, 50, 99, 50, 48, 50, 50, 50, 50, 50, 57, 48, 100, 48, 97, 50, 48, 50, 48, 50, 48, 50, 48, 54, 50, 55, 57, 55, 52, 54, 53, 53, 52, 54, 102, 52, 49, 54, 52, 54, 52, 50, 48, 51, 100, 50, 48, 54, 50, 55, 57, 55, 52, 54, 53, 53, 52, 54, 102, 52, 49, 54, 52, 54, 52, 50, 101, 55, 50, 54, 53, 55, 48, 54, 99, 54, 49, 54, 51, 54, 53, 50, 56, 50, 55, 54, 50, 50, 50, 50, 55, 50, 99, 50, 48, 50, 50, 50, 50, 50, 57, 48, 214, 48, 97, 50, 48, 50, 48, 50, 48, 50, 48, 54, 50, 55, 57, 55, 52, 54, 53, 53, 52, 54, 102, 52, 49, 54, 52, 54, 52, 50, 48, 51, 100, 236, 48, 54, 50, 55, 57, 55, 52, 54, 53, 53, 52, 54, 102, 52, 49, 54, 52, 54, 52, 50, 101, 55, 50, 54, 53, 55, 48, 54, 99, 54, 49, 54, 51, 54, 53, 50, 56, 50, 55, 50, 50, 50, 55, 50, 99, 50, 48, 50, 50, 50, 50, 50, 57, 48, 100, 48, 97, 50, 48, 50, 48, 50, 48, 50, 48, 54, 50, 55, 57, 55, 52, 54, 53, 55, 51, 50, 48, 51, 100, 50, 48, 55, 51, 55, 52, 55, 50, 50, 56, 54, 50, 55, 57, 55, 52, 199, 53, 55, 51, 50, 57, 50, 48, 50, 98, 50, 48, 50, 50, 50, 48, 50, 50, 50, 48, 50, 98, 50, 48, 54, 50, 55, 57, 55, 52, 54, 53, 53, 52, 54, 102, 52, 49, 54, 52, 25, 52, 48, 100, 48, 97, 50, 48, 50, 48, 50, 48, 50, 48, 55, 51, 55, 52, 54, 49, 55, 50, 55, 52, 52, 50, 55, 57, 55, 52, 167, 53, 50, 48, 50, 98, 51, 100, 50, 48, 51, 49, 48, 100, 48, 32, 54, 50, 54, 57, 54, 101, 52, 50, 55, 57, 55, 52, 54, 53, 50, 48, 51, 100, 50, 48, 50, 55, 50, 48, 50, 55, 50, 101, 54, 97, 54, 102, 54, 57, 54, 101, 50, 56, 54, 54, 54, 102, 55, 50, 54, 100, 54, 49, 55, 52, 50, 56, 54, 102, 55, 50, 54, 52, 50, 56, 55, 56, 50, 57, 50, 99, 50, 48, 50, 55, 54, 50, 50, 55, 50, 57, 50, 48, 54, 54, 54, 102, 55, 50, 50, 48, 55, 56, 50, 48, 54, 57, 54, 101, 50, 48, 54, 58, 55, 57, 55, 52, 54, 53, 55, 51, 50, 57, 48, 100, 48, 97, 55, 48, 55, 50, 54, 57, 54, 101, 55, 52, 50, 56, 54, 50, 55, 57, 55, 52, 54, 53, 55, 51, 50, 57, 50, 48, 48, 100, 48, 97, 55, 48, 55, 50, 54, 57, 54, 101, 55, 52, 50, 56, 54, 50, 54, 57, 54, 101, 52, 50, 55, 57, 55, 52, 54, 92, 50, 57]

进入正文 但我不能转换的唯一十六进制是:

696d706f7274206f730d0a66696c65203d206f70656e2827746573742e7079272c202272622b22290d0a7072696e742866696c65290d0a66696c652e7365656b2830290d0a737461727442797465203d20300d0a656e6442797465203d203433300d0a6279746573203d2022220d0a62696e42797465203d2022220d0a7768696c652073746172744279746520213d20656e64427974653a0d0a2020202062797465546f416464203d207374722866696c652e726561642873746172744279746529290d0a2020202062797465546f416464203d2062797465546f4164642e7265706c61636528226227222c202222290d0a2020202062797465546f416464203d2062797465546f4164642e7265706c616365282227222c202222290d0a2020202062797465546f416464203d2062797465546f4164642e7265706c61636528276222272c202222290d0a2020202062797465546f416464203d2062797465546f4164642e7265706c616365282722272c202222290d0a202020206279746573203d2073747228627974657329202b20222022202b2062797465546f4164640d0a20202020737461727442797465202b3d20310d0a62696e42797465203d202720272e6a6f696e28666f726d6174286f72642878292c202762272920666f72207820696e206279746573290d0a7072696e7428627974657329200d0a7072696e742862696e4279746529

看来您需要执行另一次转换:您获得的每对字符似乎都代表一个十六进制编码的 ascii 代码(再次)。如果您进行第二次转换,您将得到一段 Python 代码的文本,只是您提供的列表中似乎有一些超出范围的数字。但我保留了原样。每当列表中的值不表示十六进制字符时,下面的代码将生成一个“█”字符:

lst = [] #  your list comes here

def conv(a):
    try:
        return chr(int(a, 16))
    except ValueError:
        return "█"

result = "".join([conv(chr(lst[i])+chr(lst[i+1])) 
            for i in range(0, len(lst), 2)])
import re
# Make sure to never print \r without \n
print(re.sub(r"\r(?!\n)", r"\r\n", result))

输出为:

import os
file = open('test.py', "rb+")
print(file)
file.seek(0)
startByte = 0
endByte = 430
bytes = ""
binByte = ""
while startByte != endByte:
    byteToAdd = str(file.read(startByte))
    byteToAdd = byt█ToAdd.replace("b'", "")
    byteToAdd = byteToAdd.█eplace("'", "")
    byteToAdd = byteToAdd.replace('b"', "")█
    byteToAdd =█byteToAdd.replace('"', "")
    bytes = str(byt█s) + " " + byteToAd█
    startByt█ += 1
binByte = ' '.join(format(ord(x), 'b') for x in █ytes)
print(bytes) 
print(binByt█)

如您所见,输入列表中大约有 1% 的文本具有错误的对应值。

这是另一个版本,其中包含列表中超出此转换工作范围的少数条目的映射:

lst = [] #  your list comes here

fix = {
    164: 53,
    167: 54,
    34: 50,
    214: 54,
    236: 50,
    199: 54,
    25: 54,
    32: 97,
    58: 50,
    92: 53
}

def conv(a):
    return chr(fix[a] if a in fix else a)

result = "".join([chr(int(conv(lst[i])+conv(lst[i+1]), 16)) 
            for i in range(0, len(lst), 2)])
print(result)

输出为:

import os
file = open('test.py', "rb+")
print(file)
file.seek(0)
startByte = 0
endByte = 430
bytes = ""
binByte = ""
while startByte != endByte:
    byteToAdd = str(file.read(startByte))
    byteToAdd = byteToAdd.replace("b'", "")
    byteToAdd = byteToAdd.replace("'", "")
    byteToAdd = byteToAdd.replace('b"', "")
    byteToAdd = byteToAdd.replace('"', "")
    bytes = str(bytes) + " " + byteToAdd
    startByte += 1
binByte = ' '.join(format(ord(x), 'b') for x in bytes)
print(bytes) 
print(binByte)