我的 Linux 系统上有这个二进制文件...
udit@udit-Dabba ~ $ cat file.enc
Salted__s�bO��<0�F���Jw!���]�:`C�LKȆ�l
使用hexdump命令,我看到它的信息是这样的:
udit@udit-Dabba ~ $ hexdump -C file.enc
00000000 53 61 6c 74 65 64 5f 5f 1b 73 a1 62 4f 15 be f6 |Salted__.s.bO...|
00000010 3c 30 cc 46 ee 10 13 11 84 bf 4a 77 21 a4 84 99 |<0.F......Jw!...|
00000020 0e 5d ef 11 18 3a 60 43 a0 4c 4b 1e c8 86 e6 6c |.]...:`C.LK....l|
00000030
现在我在其他系统上得到了一个文件,其内容如下:
53 61 6c 74 65 64 5f 5f 1b 73 a1 62 4f 15 be f6
3c 30 cc 46 ee 10 13 11 84 bf 4a 77 21 a4 84 99
0e 5d ef 11 18 3a 60 43 a0 4c 4b 1e c8 86 e6 6c
我需要从这个十六进制转储中找出完全相同的二进制信息。
我该如何进行?
如果没有任何开关,那么 C 代码也可以正常工作。
(但最好是带有一些开关的 Linux 命令)
限制:
文件中的二进制信息是加密算法的输出,所以内容应该完全匹配...
如果出于某种难以理解的企业原因你不能
sudo apt install xxd
,很容易在Python中重新实现它,如下所示:How to create python bytes object from long hex string? with:
xxd2() ( python -c "import sys;import fileinput;sys.stdout.buffer.write(bytes.fromhex(''.join(fileinput.input(sys.argv[1:]))))" "$@" )
适用于文件和标准输入:
printf 01ab | xxd2
printf '01 ab' | xxd2
或:
printf 01ab > myfile.hex
xxd2 myfile.hex
这是具有更好缩进的脚本:
import sys
import fileinput
sys.stdout.buffer.write(
bytes.fromhex(
''.join(
fileinput.input(sys.argv[1:])
)
)
)
自Python 3.7以来,
bytes.fromhex
函数会忽略空格和换行符,因此无论格式的缩进细节如何,它都可以工作,根据文档:https://docs.python.org/3.12/library/stdtypes.html#bytes .fromhex
版本 3.7 中的更改:bytes.fromhex() 现在会跳过字符串中的所有 ASCII 空白,而不仅仅是空格。
在 Python 3.12.3、Ubuntu 24.04 上测试。