Я пытаюсь запустить команду openssl из скрипта Python, но получаю разные значения 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
Несмотря на то, что я копирую и вставляю одну и ту же команду, вывод хэш-значения отличается.
Даже более странно, если я опускаю параметр -n
в echo
, несоответствия нет:
echo 'abc' | openssl sha1
(stdin)= 03cfd743661f07975fa2f1220c5194cbaff48451
(stdin)= 03cfd743661f07975fa2f1220c5194cbaff48451
И в терминале:
(stdin)= 03cfd743661f07975fa2f1220c5194cbaff48451
Все, что я читал в Интернете о подобных проблемах, связано с тем, что он не использует -n
, а не -n
, по-видимому, вызывающий проблему.Для конкретной задачи, которую я делаю, я должен использовать -n
, так как я вычисляю предварительное изображение хеша, которое было вычислено с использованием echo -n "hash_value" | openssl sha1
.
Любая помощь будет принята с благодарностью:)