Aquí está an article que enumera los tiempos de una computadora portátil Mac con un procesador Core 2 Duo. Entonces, sí, es probable que Bcrypt sea muy lento en un dispositivo móvil.
Otro problema común es la inicialización de SecureRandom
que puede ser muy lenta y también puede bloquearse debido a la falta de suficientes datos aleatorios. Esto variará entre diferentes máquinas y sistemas operativos. Encontrará mucha discusión sobre eso en otro lugar, pero es algo que quizás desee probar, ya sea inicializándolo usted mismo usando new SecureRandom()
o llamando al gensalt
por separado para aislar la generación de datos aleatorios y luego simplemente sincronizar la llamada al hashpw
.
Otra pregunta es ¿por qué realmente quieres hash it en el cliente? Si lo está almacenando en el cliente e iniciando sesión localmente, entonces puede tener algún sentido, pero si se lo envía a un servidor y un inicio de sesión normal implica el envío de una contraseña de texto sin formato al servidor, entonces no está ganando nada. Además, una idea errónea común es que aplicar una contraseña antes de enviarla al servidor (al iniciar sesión) ofrece cierta protección, cuando de hecho es equivalente a enviar la contraseña de texto plano. Un atacante solo tiene que obtener el hash para poder obtener acceso.
Las contraseñas hash son un medio para evitar que un atacante obtenga acceso (o al menos ralentizarlos) si la propia contraseña se almacena.
Por lo tanto, si la contraseña se almacena en el servidor, se debe enviar en texto sin formato (a través de un canal seguro) y el servidor debe tomar la decisión sobre cómo se procesa el hash.
Bueno, en cierto modo, bcrypt está diseñado para hacer precisamente eso. Por supuesto, si causa un bloqueo tan prolongado en el cliente, no es aceptable. – NullUserException
¿Ha intentado ejecutar el proceso de hashing en otro hilo además de la IU? (por ejemplo: android.os.AsyncTask) – Skarllot