繁体   English   中英

将十六进制字符串转换为 base 64

[英]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)

这里heks0x56 我现在想要 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

对于数值,如16 ,这给出了7 ,它适合。

但是当我有字符时,比如c8 ,我得到] 这对我来说真的没有意义,因为它真的应该给我4

尝试使用chr(heks) 这通常会将 ASCII 索引转换为相应的字符。

至少根据您的 MRE,您实际上并不需要h ^ h1hex ,因此您可以调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM