我正在努力走一条路
C:\windows\programs\test
然后将其与路径长度相同的随 secret 钥进行异或
4deebb6172406e69316df004e38334a5f6c1a80c8b865800
我使用生成 key
binascii.b2a_hex(os.urandom(24))
当它们相互异或时,我得到一个如下所示的字符串:
b'\x02\x0cj@Y[\x05\x0cN@>GAYRBV\x0fD=GP\x16@'
我的问题是,是否有可能获得仅十六进制的输出?不生成所有字符,而是保留它(a-f、A-F、0-9)?
最佳答案
字节字符串实际上只是一系列从 0 到 255 的数字。您可以通过以下方式查看:
list(b'\x02\x0cj@Y[\x05\x0cN@>GAYRBV\x0fD=GP\x16@')
# returns:
[2,
12,
106,
64,
89,
91,
5,
12,
78,
64,
62,
71,
65,
89,
82,
66,
86,
15,
68,
61,
71,
80,
22,
64]
您可以通过以下方式将字节字符串转换为长度为 2 的十六进制数字序列:
''.join(f'{b:0>2x}' for b in b'\x02\x0cj@Y[\x05\x0cN@>GAYRBV\x0fD=GP\x16@')
# returns:
'020c6a40595b050c4e403e4741595242560f443d47501640'
这使用格式字符串(f-string)将每个字节b
转换为十六进制值(f'{:x}'
),而且还填充长度为 2 并以 0 开头的字符串 (f'{:0>2}'
)。
关于python - 异或字符串并仅返回十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53861838/