6dfd2768f...245.png, 249.29 KB, 500x390, exif ggl iq id3
#!/usr/bin/env python
import bcrypt

salt = 'Python_KoKoKo_Kto_Ne_Pishet_Na_Pytone_Tot_Pitooh_Takie_To_Stdlibi_Ohuennie'
password = 'NORM_PAROL_TAKOI_ZASHEBEES'
passwordhash = bcrypt.hashpw(salt + password, bcrypt.gensalt())
print(passwordhash)

password = 'BLYA PUSTI OCHE NADO KAK CHILOVEKA PROSHU'
if bcrypt.hashpw(salt + password, passwordhash) == passwordhash:
print('Authenticated. Use Python. Use bcrypt. Such secure. Wow.')
else:
print('Wrong password. Never has been here.')

И это надо же было ещё догадаться такой мудацкий интерфейс придумать, где одна и та же функция используется как для хеширования, так и для верификации.
http://stackoverflow.com/questions/27413248/why-can-bcrypt-hashpw-be-used-both-for-hashing-and-verifying-passwords

>>7uZ
В РНР так же было до версии 5.5

>>7vR
Ну PHP-то говно, с ним всё ясно, а Python — он же для элиты.
c883be1b8...87b.png, 37.03 KB, 463x526, exif ggl iq id3

>>7vX
Ну, хорошо, вот задача: тебе надо проверить, что хэш от переданного пароля с той же солью, с которой он хэшировался в прошлый раз, совпадает с хэшем, который получился в прошлый раз, при том, что соль и хэш хранятся в одном и том же поле. Твои предложения?

>>7w0
> Задача: сравнить два хеша.
Использовать оператор сравнения. Это не модно, не молодёжно, не через сраку, зато работает. Хотя в случае с тем, что наговнякали в bcrypt, это не поможет. А для того чтобы достать соль, должна быть такая специальная функция, которая называется getSaltFromMySmyssieHashFormat(). Но шкальнику было невдомёк, что для разных операций следует использовать разные функции. Вероятно, следующем его творением будет какая-нибудь операционная система, в api которой будет одна-единственная функция с названием anus(), а результаты её вызова будут охватывать весь необходимый для работы ОС функционал и зависеть исключительно от входных пара��етров, назначение и смысл которых будут определяться эвристическим алгоритмом, базирующимся на нейронной сети.

>>7w5
>Использовать оператор сравнения.
Чтобы сравнивать хэши, нужно сначала иметь хэши. А чтобы получить хэш от нового (проверяемого) пароля, нужно сначала его прохэшировать с той же солью. В итоге тебе всё равно придётся делать хэшировать новый пароль перед сравнением, но в твоём варианте — ещё и доставать перед этим соль отдельной функцией

>>7wb
Ну, как я уже упоминал выше, можно сделать функцию anus() и кидать в неё всё подряд, не соблюдая порядок агрументов, чтобы было место для творческого полёта мысли. Никто не запрещает, конечно.

>>7wc
Ты тупой или прикидываешься?
У тебя есть проверяемый пароль и хэш верного пароля. Как ты проверишь пароль? Получаешь хэш и сравниваешь с верным хэшем, используя
>оператор сравнения. Это не модно, не молодёжно, не через сраку, зато работает.

>>7xq
> Как ты проверишь пароль?
Может все-таки ты тупой, а не я? Что за хуйню ты спрашиваешь?
96097dd38...23.jpeg, 92.79 KB, 1023x750, exif ggl iq id3

Да, придётся доставать соль. Чтобы соль не доставать, можно сделать функцию, которая будет доставать соль и проверять хеш. Но не одну, блядь, функцию делать для расчета простого хеша и для вытягивания соли и последующего хеширования. Это некорректно, блядь. Что, если я захочу иметь соль, которая вдруг окажется валидным засоленным хешем? Что, если такая соль сгенерируется автоматически? Да и даже без этого, делать одну функцию ДЛЯ ВСЕГО БЛЯДЬ - это ёбаная тупорылая тупость.

>>7xs
Уже не сразу вспомнил, что же меня насторожило в виде фоточки усатой женщины на имиджборде.

>>7xs
>Что, если я захочу иметь соль, которая вдруг окажется валидным засоленным хешем? Что, если такая соль сгенерируется автоматически?
Тогда лишние символы при генерации пасс-хэша заэскейпятся. Так же, как в строчках кавычки и прочая хуйня экранируются.
Сделано это для обратной совместимости — чтобы не пришлось менять структуру БД (или где там ещё в аппликухе хранятся учётные данные), добавляя ещё одно поле под соль.

>>7xu
> Тогда лишние символы при генерации пасс-хэша заэскейпятся.
1. Это норма.
2. Если не выдумывать всяких блядских форматов хранения хешкодов и солей в одной строке, что не является вообще-то предметной областью bcrypt'a, а отдать эту задачу конечному программисту, то и проблемы такой даже не возникнет. Здесь живой пример того, как хуёвый дизайн вызывает дополнительные проблемы.
> Сделано это для обратной совместимости — чтобы не пришлось менять структуру БД
Структура БД, блядь, не должна, блядь, являться предметной областью хеш-функции, блядь. Структура БД это забота конечного программиста - пользователя хеш функции. Гей-школотрон же, писавший bcrypt думал, что он умнее всех на свете и заранее придумает структуру БД и 72 символа в пароле хватит каждому, в итоге из-за чего и жидко обосрался. А тому, кто пропустил это дерьмо в официальные репозитории, надо в голову гвоздь забить.

> print('Wrong password. Never has been here.'

В говнокод не вчитывался, но английский у ОПчика с баальшими косяками. Never has been here - это что вообще за хуета? Школьник детектед, сажа.

>>7xx
> Не могу доебстись по существу - так доебусь до орфографии.
Да. У меня действительно хуёвый английский.