Не могу заставить функцию hash () работать в python 3.2.2 - PullRequest
0 голосов
/ 11 декабря 2011

У меня проблема с этим кодом:

print('insert password below to get a hash')
pass = int(input('Input passowrd> ')

hash(pass)
input()

Я просто получаю сообщение об ошибке, когда пытаюсь запустить его, я попробовал help(hash) в оболочке python, прочитал документы, как можно больше гуглил, но не могу заставить его работать: - /

В чем проблема?

Ответы [ 4 ]

3 голосов
/ 11 декабря 2011

Ваш код написан, но, вероятно, это не то, что вы ожидали (хэш целого числа - это просто целое число).Попробуйте вместо этого:

print('insert password below to get a hash')
pass_str = input('Input password: ')
h = hash(pass_str)

Кроме того, если вы храните хеш-значения для паролей и хотите, чтобы они были безопасными, обязательно используйте криптографически надежный хеш, такой как в модуль hashlib :

>>> pass_str = 'the phrase that pays'
>>> hashlib.sha256(pass_str.encode()).hexdigest()
'a91ba2a03eb9772b114e6db5c5a114d8a9b3ba419a64cdde9606a9151c8a352e'
3 голосов
/ 11 декабря 2011

Я думаю, у вас две проблемы.


Во-первых, pass- word обычно не является целым числом, поэтому ваш вызов int, скорее всего, вызовет исключение.

Вы, вероятно, хотите это:

pass = input('Input password> ')

Во-вторых, функция hash возвращает хеш-код для объекта для целей быстрого сравнения. Это не криптографическая хеш-функция . Попробуйте вместо этого использовать что-то вроде обычно используемого алгоритма MD5 или (предпочтительно) что-то более безопасное, например, семейство алгоритмов SHA-2 .

Вы можете использовать hashlib для генерации криптографически безопасных хешей. Пример:

>>> import hashlib    
>>> hashlib.md5('admin'.encode('utf-8')).hexdigest()
'21232f297a57a5a743894a0e4a801fc3'
>>> hashlib.sha256('admin'.encode('utf-8')).hexdigest()
'8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918'

В зависимости от ваших потребностей, вы также можете рассмотреть возможность использования salt для дополнительной защиты пароля.

2 голосов
/ 11 декабря 2011

pass - это оператор, вы не можете иметь переменную с таким именем в Python.

>>> pass = 1
SyntaxError: invalid syntax
>>> 
0 голосов
/ 11 декабря 2011

В будущем это поможет опубликовать полученную ошибку. Бьюсь об заклад, это ValueError, который жалуется, что пароль не может быть преобразован в int, что совершенно правильно.

Нет смысла конвертировать в целое число; hash отлично работает для строк:

print('Input password below to get a hash:')
pass = input('Input password> ')
print(hash(pass))
input()
...