[英]openssl sha1 giving different results in the terminal vs in Python
我正在嘗試從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
。
任何幫助將非常感激 :)
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.