如何将字节转换为字符串?

2024-05-15 12:53:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字节,我想把它转换成python中的字符串

以下是我要转换的字节:

b'\xfeD1\xc2B\xac\xf86Mx\xc1\x0e\xa4\xe2x\x0c,\xd4\x1a\xb1'

但我无法将其转换为普通字符

此外,我提供上述字节作为输入

我试过:

my_str = b'\xfeD1\xc2B\xac\xf86Mx\xc1\x0e\xa4\xe2x\x0c,\xd4\x1a\xb1'.decode()
print(my_str)

我得到的错误是:

Traceback (most recent call last):
  File "E:/Mainproject.py", line 39, in <module>
    my_str = b'\xfeD1\xc2B\xac\xf86Mx\xc1\x0e\xa4\xe2x\x0c,\xd4\x1a\xb1'.decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfe in position 0: invalid start byte

编辑:1 这是我用来编码文本的代码。这里我尝试使用一些pn序列来加密输入的文本,得到的结果输出是一个字节。 现在我想创建另一个程序,将这个字节作为输入,并将其解码为纯文本

from pylfsr import LFSR

# The initial state
state = [0,0,0,1,0,1,0,1,0,1,1]
# The LFSR polynomial use a primitive polynomail to get maximum period length
poly = [2,2,3,4,2]
l = LFSR(fpoly=poly, initstate =state)
print(l)
message = input().encode()
ciphertext = b""

# generate all LFSR sequence
allseq = l.runFullCycle()
seq = ""
seq_index = 0

# Convert LFSR bits into a string
for x in allseq:
    seq += str(x)
for counter in range(len(message)):
    ran_seq = seq[seq_index: seq_index+8]
    # Now encrypt by XOR convert to bytes and append to ciphertext
    # print(type(message[counter]),message[counter],type(ran_seq),ran_seq,int(message[counter]^int(ran_seq)))
    ciphertext += bytes([int(message[counter]) ^ int(ran_seq, 2)])
    # print(ciphertext)
    seq_index += 8  # Move sequence to Next byte

print(ciphertext)

Tags: toinmessageindex字节counterseqint
2条回答

decodebytes转换为strencodestr转换为bytes

my_str = b'\xfeD1\xc2B\xac\xf86Mx\xc1\x0e\xa4\xe2x\x0c,\xd4\x1a\xb1'.decode()

您需要使用latin1编码,但这会导致如果这些字节是非拉丁字符,那么最终将使用Mojibake字符,这在您的情况下似乎是如此。你能说这是什么样的绳子吗

my_str = b'\xfeD1\xc2B\xac\xf86Mx\xc1\x0e\xa4\xe2x\x0c,\xd4\x1a\xb1'
print(my_str.decode("latin1"))

编辑:您正在尝试解码加密的ciphertext并使您的文本返回未锁定状态,这是加密试图阻止的,要返回您的文本,您必须先解密,然后解码使用以下代码:

from pylfsr import LFSR

state = [0,0,0,1,0,1,0,1,0,1,1]
poly = [2,2,3,4,2]
l = LFSR(fpoly=poly, initstate =state)
print(l)
message = input("Enter message to encrypt: ").encode()
ciphertext = b""

allseq = l.runFullCycle()
seq = ""
seq_index = 0

for x in allseq:
    seq += str(x)
for counter in range(len(message)):
    ran_seq = seq[seq_index: seq_index+8]
    ciphertext += bytes([int(message[counter]) ^ int(ran_seq, 2)])
    seq_index += 8  # Move sequence to Next byte

print(ciphertext)
ciphertext_file_name = "ciphertext"
with open(ciphertext_file_name, "wb") as out_file:
    out_file.write(ciphertext)

# Read ciphertext and decrypt it
with open(ciphertext_file_name, "rb") as in_file:
    ciphertext = in_file.read()
    seq_index = 0
    plaintext_again = b""
    for counter in range(len(ciphertext)):
        ran_seq = seq[seq_index: seq_index + 8]
        plaintext_again += bytes([int(ciphertext[counter]) ^ int(ran_seq, 2)])
        seq_index += 8  # Move sequence to Next byte
    print(plaintext_again.decode("latin1"))

相关问题 更多 >