【发布时间】:2019-03-17 20:46:06
【问题描述】:
我正在尝试从 Python 脚本运行 openssl 命令,但我从脚本中执行的命令和直接在终端中执行的命令获得了不同的 sha1 值。
这是我的代码:
command = "echo -n '" + hex(key)[2:] + "' | openssl sha1"
print(command)
os.system(command)
output = subprocess.check_output(command, shell=True)
# This converts the bytes object to a string.
output = output.decode("utf-8")
print(output)
os.system(command) 只是用来检查这个方法和subprocess.check_output() 是否给出相同的结果。
这是key=0xabc 示例输入的程序输出:
echo -n 'abc' | openssl sha1
(stdin)= 9d4fe92b8bdc894f5838fad83108bf3841b257fa
(stdin)= 9d4fe92b8bdc894f5838fad83108bf3841b257fa
第一行是要执行的命令,第二行是使用 os.system() 的命令结果,第三行是使用 subprocess.check_output() 的命令结果。如您所见,两种方法的结果相同。
现在,如果我复制并粘贴此处显示的命令并在终端中执行,结果如下:
(stdin)= a9993e364706816aba3e25717850c26c9cd0d89d
即使我复制并粘贴完全相同的命令,哈希值输出也是不同的。
更奇怪的是,如果我在echo 中省略了-n 选项,则不会出现不一致:
echo 'abc' | openssl sha1
(stdin)= 03cfd743661f07975fa2f1220c5194cbaff48451
(stdin)= 03cfd743661f07975fa2f1220c5194cbaff48451
在终端中:
(stdin)= 03cfd743661f07975fa2f1220c5194cbaff48451
我在网上读到的关于类似问题的所有内容都源于没有使用-n,而不是-n 似乎导致了问题。对于我正在执行的特定任务,我必须使用-n,因为我正在计算使用echo -n "hash_value" | openssl sha1 计算的散列的原像。
任何帮助将不胜感激:)
【问题讨论】: