gpt4 book ai didi

python - 如何在 Python 3 中将二进制转换为字节再转换为十六进制?

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:45 28 4
gpt4 key购买 nike

我正在尝试编写一个程序,将两个十六进制字符串转换为字节,然后从字节转换为二进制。一旦变成二进制,我想对它们执行 XOR 转置。完成后,我想将二进制字符串转换回字节,然后再转换为十六进制。我已经知道答案应该是什么了,这只是一个从 A 到 B 的问题。

我目前的代码如下:

input1 = "1c0111001f010100061a024b53535009181c"
input2 = "686974207468652062756c6c277320657965"

target = "746865206b696420646f6e277420706c6179"

d = conversions.hexconvert(input1)
e = conversions.hexconvert(input2)

print(d)
print(e)

f = bitstring.BitArray(d)
g = bitstring.BitArray(e)

xor1 = f.bin
xor2 = g.bin

print("xor1 is", xor1)
print("xor2 is", xor2)

xor1, xor2 = xor2, xor1

print("xor1 is now:", xor1)

函数“hexconvert”由以下代码组成:

import codecs

def hexconvert(input):
output = codecs.decode(input, 'hex')
return(output)

我的代码目前吐出以下内容:

b'\x1c\x01\x11\x00\x1f\x01\x01\x00\x06\x1a\x02KSSP\t\x18\x1c'
b"hit the bull's eye"
xor1 is : 000111000000000100010001000000000001111100000001000000010000000000000110000110100000001001001011010100110101001101010000000010010001100000011100
xor2 is : 011010000110100101110100001000000111010001101000011001010010000001100010011101010110110001101100001001110111001100100000011001010111100101100101
xor1 is now: 011010000110100101110100001000000111010001101000011001010010000001100010011101010110110001101100001001110111001100100000011001010111100101100101

到目前为止一切都很好。我想知道我可以在这段代码的末尾添加什么来将 xor1 转换为字节,然后再转换为十六进制,以便我可以将它与它应该是的结果进行比较。我一直在努力弄清楚如何使用 struct、binascii 甚至位串,但我一无所获。非常感谢任何和所有建议。

如果有人可以建议如何使代码更高效,那也很棒。

非常感谢!

最佳答案

你不必在这里转换成位;你可以 XOR bytes 就好了。当您遍历 bytes 对象时,您会获得 0-255 范围内的整数形式的单个值,并且您可以对这些值进行 XOR 。反之亦然,您可以从整数序列再次创建一个新的 bytes 对象。

使用 binascii.unhexlify() 将十六进制转换为字节, 再次返回 binascii.hexlify() :

from binascii import hexlify, unhexlify

bytes1, bytes2 = unhexlify(input1), unhexlify(input2)
xor_bytes = bytes([b1 ^ b2 for b1, b2 in zip(bytes1, bytes2)])

result = hexlify(xor_bytes).decode('ascii')

解码用于将 hexlifybytes 输出转换回字符串。

演示:

>>> from binascii import hexlify, unhexlify
>>> input1 = "1c0111001f010100061a024b53535009181c"
>>> input2 = "686974207468652062756c6c277320657965"
>>> bytes1, bytes2 = unhexlify(input1), unhexlify(input2)
>>> xor_bytes = bytes([b1 ^ b2 for b1, b2 in zip(bytes1, bytes2)])
>>> xor_bytes
b"the kid don't play"
>>> hexlify(xor_bytes).decode('ascii')
'746865206b696420646f6e277420706c6179'

关于python - 如何在 Python 3 中将二进制转换为字节再转换为十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25360377/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com