繁体   English   中英

openssl sha1在终端与Python中给出不同的结果

openssl sha1 giving different results in the terminal vs in Python

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试从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计算出的哈希值的前映像。 echo -n "hash_value" | openssl sha1

任何帮助将非常感激 :)

1 个回复

TL; DR :使用/bin/echo

说明

python system命令可能使用/bin/sh的默认外壳,该外壳通常链接到POSIX兼容外壳,而终端会话使用用户的登录外壳(可能是bash POSIX Shell标准不支持echo内置函数的-n选项。 这意味着您实际上是在计算“ -n abc”的摘要。 您可以像这样重现bash:

echo "-n abc" | openssl sha1
9d4fe92b8bdc894f5838fad83108bf3841b257fa

二进制可执行文件仍然可用,但是需要使用完整路径来调用,因为内置的shell会覆盖它。 代替echo ,使用/bin/echo

1 sha1与go在python和openssl中的区别

我试图在go中构建一个base64编码的sha1哈希,但我得到的结果与其他编程语言的结果非常不同 此Go Code打印出aGVsbG/aOaPuXmtLDTJVv++VYBiQr9gHCQ== 我的Python代码看起来像这样 并输出qvTGHdzF6KLavt4PO0gs ...

3 C++ OPENSSL 中的 SHA1 错误

有人能告诉我我做错了什么吗? 我正在尝试为“12345”打印 SHA1 哈希,但显示错误,我无法弄清楚代码中的问题是什么 我得到的哈希: 正确的哈希: ...

4 使用openssl库在C中的sha1示例

我有一个使用openSSL库用C语言编写的sha256的最简单的例子。 我需要相同的sha1 ,但我找不到实际工作的类似简单的例子。 使用SHA1替换上述代码中出现SHA256的天真方法不起作用(显然)。 如何修改SHA1程序? UPDATE 正如@dbush建议的那 ...

5 如何在python中创建sha1哈希

我的目标是在python中使用智能卡执行“Hashsigning”。 有使用hashlib,但python中没有特定的SHA1或SHA256函数。 我的工作: 但我得到的哈希对象的长度是28而不是我应该得到14或20,这样我就可以打开条件了 任何帮助表示赞赏。 先感谢您 ...

9 crypto / sha1不匹配openssl命令

我正在尝试计算sha1,但是sha1与openssl命令不匹配。 我在Macbook上像这样计算一个空文件的哈希值: 这是我拥有的简单测试代码: 这是输出,因为您看到输出不匹配,有人知道我在做什么错吗? ...

10 CodeIgniter中的sha1?

CodeIgniter sha1和普通PHP sha1有什么区别? 例如: 和 两者都将返回相同的值。 CodeIgniter在哪里使用encryption_key ? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM