Хеширование в SHA512 с помощью соли? - Python

Я просматривал тыс hashlib документация, но не нашел ничего говорящего об использовании соли при хешировании данных.

Справка была бы большой.

38
задан RadiantHex 24 May 2010 в 16:58
поделиться

4 ответа

Ответ Самира правильный, но несколько загадочный. По сути, соль - это просто случайно полученный бит данных, который вы префикс или добавляете к своим данным, чтобы резко увеличить сложность атаки по словарю на ваше хешированное значение. Итак, учитывая соль s и данные d , вы должны просто сделать следующее, чтобы сгенерировать соленый хеш данных:

import hashlib
hashlib.sha512( s + d ).hexdigest()

См. Эту статью в википедии для подробнее

72
ответ дан 27 November 2019 в 03:09
поделиться

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

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
b'\xd0\xf4\xc1LH\xadH7\x90^\xa7R\x0c\xc4\xafp\x0fd3\xce\t\x85\xe6\xbb\x87\xb6\xb4a|\xb9D\xab\xf8\x14\xbdS\x96M\xdb\xf5[A\xe5\x81+:\xfe\x90\x89\x0c\nM\xb7\\\xb0Cg\xe19\xfdb\xea\xb2\xe1'
>>> m.update(b"My super-secret salt.")
>>> m.digest()
b'\xcd\xd7K\xd9!~\xa8\x1d6\x9b\xa6\xde\x06\t\x02\xa1+}\xaeNA\x94a`\xaa\xf4\xe9\xb5\xff\x1f\x9cE\x84m\xbb\x98U\xb4z\x92\x9e\xe8\xc9\xc2\xc8\x8f\x068e\xb0\r\xed\xb7\xde\x80\xa6,\n\x111w{\xa2\x9b'
8
ответ дан 27 November 2019 в 03:09
поделиться

Если вы ищете замену crypt (), в более новых версиях glibc есть «$ 6 $» на основе SHA-512 с переменным количеством итераций (см. страницу Ульриха Дреппера , на которой есть описание и ссылки на полную реализацию C sha512_crypt_r () ).

Писать собственную криптографию крайне не рекомендуется - указанная выше sha512 (соль + пароль) не помогает против атак грубой силы.

Для генерации соли используйте что-то вроде os.urandom (16) для случайных байтов или ''. Join (map (lambda x: './ 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklvmnopxyzrst [ord 64], os.urandom (16))) для случайных символов, похожих на base64 (для использования с crypt () - подобных).

(Я говорю, что как base64, это не то же самое, что Base64 в PEM / MIME.)

7
ответ дан 27 November 2019 в 03:09
поделиться

Просто добавьте соль к вашим конфиденциальным данным:

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update('salt')
>>> m.update('sensitive data')
>>> m.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> n = hashlib.sha512()
>>> n.update('%ssensitive data' % 'salt')
>>> n.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> hashlib.sha512('salt' + 'sensitive data').hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
18
ответ дан 27 November 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: