модуль crypt не выводит хеш SHA512, как ожидалось - PullRequest
0 голосов
/ 11 октября 2019

В настоящее время я использую модуль crypt в Python, чтобы попытаться создать хеш SHA512 следующим образом.

Когда я запускаю следующую строку кода из этого SO post :

>>> import crypt
>>> crypt.crypt('password', '$6$' + 'salt1234')

Вместо просмотра следующего вывода соли, за которым следует хеш SHA512 для этого сообщения SO :

'$6$salt1234$Zr07alHmuONZlfKILiGKKULQZaBG6Qmf5smHCNH35KnciTapZ7dItwaCv5SKZ1xH9ydG59SCgkdtsTqVWGhk81'

Я получаю следующее:

$6FMi11BJFsAc

Ниже приведен скриншот в качестве доказательства:

enter image description here

Почему я не могу получить хеш SHA512, который яжду?

1 Ответ

1 голос
/ 11 октября 2019

С https://docs.python.org/3/library/crypt.html:

Этот модуль реализует интерфейс для подпрограммы crypt (3) , которая является односторонней хэш-функцией, основанной на модифицированном алгоритме DES;см. справочную страницу Unix для получения более подробной информации. […]

Обратите внимание, что поведение этого модуля зависит от фактической реализации подпрограммы crypt (3) в работающей системе. Поэтому любые расширения, доступные в текущей реализации, также будут доступны в этом модуле.

и из документации самой функции (выделено мной):

Необязательная соль - это либо строка, возвращаемая из mksalt(), одно из значений crypt.METHOD_* (, хотя не все могут быть доступны на всех платформах )

crypt платформы, на которой вы находитесь, вероятно, не поддерживает SHA-512. Вы можете подтвердить это, проверив, находится ли crypt.METHOD_SHA512 в crypt.methods.

>>> crypt.methods
[<crypt.METHOD_CRYPT>]
>>> "\N{CRYING FACE}"
'?'

Можно посмотреть описание SHAcrypt и сделать реализацию на его основе, или использовать чужой .

from passlib.hash import sha512_crypt
sha512_crypt.hash('password')
...