Python3中的XOR字节

问题描述 投票:1回答:1

试图在python3中xor字节:

import os,binascii
import numpy as np

def xor_byte_hex_strings(a, b) :
    return bytes(x ^ y for x, y in zip(a, b))


number_of_bytes = 2

random_bytes = []

random_bytes_str = binascii.b2a_hex(os.urandom(number_of_bytes))
random_bytes.append(random_bytes_str)

print(random_bytes_str)
print(bytearray(random_bytes_str))

random_bytes_str = binascii.b2a_hex(os.urandom(number_of_bytes))
random_bytes.append(random_bytes_str)

resultant = xor_byte_hex_strings(random_bytes[0], random_bytes[1])
print("resultant = ", bytearray(resultant))
print(random_bytes)

resultant = xor_byte_hex_strings(random_bytes[1], resultant)
print(resultant)

结果是b'\ x03 \ x03 \ x0cU'而不是b'13ce。我们如何将格式从b'\ x03 \ x03 \ x0cU'转换为b'13ce?

python-3.x format byte xor
1个回答
1
投票

为什么不使用字符串和ints让您的生活更轻松?

import os,binascii

def xor_strings(a, b):
    result = int(a, 16) ^ int(b, 16) # convert to integers and xor them together
    return '{:x}'.format(result)     # convert back to hexadecimal

number_of_bytes = 2
random_bytes = []

# decode() to turn it into a str.
random_bytes_str = binascii.b2a_hex(os.urandom(number_of_bytes)).decode()
random_bytes.append(random_bytes_str)


random_bytes_str = binascii.b2a_hex(os.urandom(number_of_bytes)).decode()
random_bytes.append(random_bytes_str)

print(random_bytes)
xored = xor_strings(*random_bytes)
print("resultant = ", xored.encode())

print([random_bytes[1], xored])
resultant = xor_strings(random_bytes[1], xored)
print(resultant.encode()) # encode() will turn it back to bytes if you want bytes

输出:

['4588', '3af9']
resultant =  b'7f71'
['3af9', '7f71']
b'4588'
© www.soinside.com 2019 - 2024. All rights reserved.