python - 异或字符串并仅返回十六进制

标签 python python-3.x

我正在努力走一条路

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/

相关文章:

python - 将相同的字符串格式应用于不同数量的变量

python - 在另一个 for 循环中使用 for 循环

python - 如何在 Django 中使用 Hardcopy 在选定的目录中创建 pdf 输出文件?

python - 修复对数刻度中的 x 和 y 轴格式

python - 如何访问函数内的变量

python-3.x - 使用 pytest 禁用在控制台上打印日志输出

python - 为什么这个简单的 websocket 代码会在客户端断开连接时抛出异常?

python - 使用索引 Python 删除列表项的更有效方法

python - 使用 dpkt (Python) 解析 pcap 文件

python - 在 Python 中的 For 语句中为输入字段循环一个变量