Вот статья , в которой перечисляется время, проведенное на ноутбуке Mac с процессором Core 2 Duo. Так что да, Bcrypt, вероятно, будет очень медленным на мобильном устройстве.
Другая распространенная проблема - инициализация SecureRandom
, которая может быть очень медленной и зависать из-за отсутствия достаточного количества случайных данных. Это будет зависеть от разных машин и операционных систем. Вы найдете множество обсуждений этого в другом месте, но вы можете захотеть протестировать его, либо инициализируя его самостоятельно, используя new SecureRandom()
, либо вызывая gensalt
отдельно, чтобы изолировать генерацию случайных данных, а затем просто назначьте время для вызова hashpw
,
Другой вопрос: почему вы на самом деле хотите хешировать это на клиенте? Если вы храните его на клиенте и регистрируетесь локально, тогда это может иметь некоторый смысл, но если оно отправляется на сервер и обычная регистрация предполагает отправку незашифрованного пароля на сервер, то вы ничего не получаете. Кроме того, распространенным заблуждением является то, что хеширование пароля перед его отправкой на сервер (при входе в систему) обеспечивает некоторую защиту, хотя на самом деле это эквивалентно отправке открытого текста пароля. Атакующий может получить хеш, чтобы получить доступ.
Хеширование паролей - это средство предотвращения доступа злоумышленника (или, по крайней мере, его замедления) в случае взлома самого хранилища паролей.
Таким образом, если пароль хранится на сервере, его следует отправлять в виде открытого текста (по защищенному каналу), и сервер должен принять решение о том, как его хэшировать.