我有一个十六进制格式的文件,我试图用OpenSSL解密。但是,在将文件从十六进制转换回二进制之后,在输入正确的密码之后,我将收到一个bad magic number
错误。我在Debian上使用bash。
我尝试用一个简单的文件再现错误,下面是我所采取的步骤:
将文本写入文件:hello world
和
使用密码1234
的
openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -in test.txt -out test.data
删除原始文件:rm test.txt
1234
test.data
:使用密码OpenSSL解密openssl enc -d -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -in test.data -out test.txt
test.data
转换为十六进制:cat test.data | hexdump -C | tee test.hex
(这是我的原始文件是如何转换的,所以这就是我现在的数据格式)
xxd -r -p test.hex test.data.copy
:
test.hex
转换回二进制1234
解密test.data.copy
:openssl enc -d -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -in test.data.copy -out test.txt
。在这里,我接收到bad magic number
错误,并看到解密的文件是空白的编辑:多亏了@Barmar,我发现这些文件是不同的。因此,在使用cat
输出二进制文件时出现了错误。知道了这一点,还有没有办法恢复原始文件?
我哪里出问题了?有没有在我不知道的过程中插入了一些额外的字节?由于我只有十六进制文件,而没有原始文件,我应该做什么来确保它被正确解密?谢谢
发布于 2022-03-04 20:45:20
感谢@GordonDavisson向我展示了使用hexdump -C
的问题。
正如他在评论中提到的,使用hexdump -C
会向文件中添加一堆额外的数据,xxd -r -p
将这些数据包含在结果输出文件中。
我只需删除每行开头的行号和末尾的ASCII表示。然后,我删除了新行和双白空间,以获得一个普通的十六进制文件。在获得普通十六进制之后,我能够使用相同的xxd -r -p
命令转换为二进制文件,并成功地使用openssl
解密。
谢谢你的帮助,否则我就不知道了
https://stackoverflow.com/questions/71345475
复制相似问题