[英]Converting a hex string to base 64
这似乎应该是世界上最简单的事情,这里也有一些关于它的问题,但似乎没有一个有效。 在很多情况下/答案中,arguments 没有正确填写,或者直接回答不起作用。
我有这个超级简单的代码,我取两个字符,获取它们的十六进制值,并将它们转换为整数。 然后我对它们进行异或,并将结果转换为十六进制。 现在我只想将这个 output 再次转换为字符。 出于某种原因,这不是一项简单的任务:
h1 = int(hex(ord("c")),16)
h = int(hex(ord("5")), 16)
heks = hex(h ^ h1)
这里heks
是0x56
。 我现在想要 char 值。 我试过这个: fu = base64.encode(heks) 这不起作用,因为缺少参数。
我如何找回一个字符?
我的其他尝试
我也试过这个我发现的 function:
def HS_to_bs4(string):
decodedHexString = bytes.fromhex(string)
bs4_encodedString =base64.b64encode(decodedHexString)
return bs4_encodedString.decode()
它也不起作用,它在第一行失败了
non-hexadecimal number found in fromhex() arg at position 1
编辑我意识到我在这里做了太多工作,并简化为:
h1 = ord("c")
h = ord("8")
print(6^1)
heks = h ^ h1
print(heks)
print(chr(heks))
我可以简单地转换为一个字符,太棒了。 但是现在有个小问题。 我正在做的整体练习与使用这个字符串有关:
1c0111001f010100061a024b53535009181c
用这个异或:
686974207468652062756c6c277320657965
哪个应该产生这个:
746865206b696420646f6e277420706c6179
对于数值,如1
和6
,这给出了7
,它适合。
但是当我有字符时,比如c
和8
,我得到]
。 这对我来说真的没有意义,因为它真的应该给我4
尝试使用chr(heks)
。 这通常会将 ASCII 索引转换为相应的字符。
至少根据您的 MRE,您实际上并不需要h ^ h1
的hex
,因此您可以调用char = chr(h ^ h1)
。
编辑:
如果您有两个输入字符串并且需要将它们异或在一起,只需执行
A = "abc"
B = "def"
result = [chr(ord(a) ^ ord(b)) for a, b in zip(A, B)]
result
将是另一个str
,使用base64
对其进行编码应该没有问题。
如果您的输入字符串实际上不是字符串,而是十六进制数字,那么您可以使用A = int(A, 16)
将它们转换为数字。 然后代码看起来像这样:
A = "1c0111001f010100061a024b53535009181c"
B = "686974207468652062756c6c277320657965"
A = int(A, 16)
B = int(B, 16)
result = hex(A ^ B) # 0x746865206b696420646f6e277420706c6179
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.