Lo que estás buscando, en teoría, es una cosa llamada "tabla de arco iris", una tabla de búsqueda de hashes a sus resultados originales. Hay bastantes de ellos en línea (y tienden a ser enormes, ya que contienen mucho más que el simple millón de entradas para "000000" a "999999"). Son los más comunes para hashes simples (MD5, SHA1, etc.).
Desafortunadamente para usted, bcrypt requiere el uso de una técnica muy estándar para derrotar a las tablas del arco iris: un salt que se combina con la contraseña antes del hashing, lo que significa que el rango de contraseñas que debe verificar es esencialmente muchos órdenes de magnitud más grandes que los simples millones de valores que está verificando.
Bcrypt en realidad requiere un salt , por lo que definitivamente hay uno ahí. Creo que en su ejemplo es la parte lzzo9IuiAWyIs2H4NI4w1.
(los primeros 22 caracteres codificados en base64 después del tercer $
, según Descripción de Wikipedia del algoritmo). La sal debe almacenarse en texto sin formato, pero significa que cualquier tabla de arco iris creada sin usar esa sal específica no sirve para descifrar la salida (y ninguna tabla precalculada usará esa sal aleatoria específica).
Alguien podría reutilizar una sola sal (con al menos algunas implementaciones de bcrypt, esto es posible) pero se supone que las sales se generan de forma única para cada contraseña. Compruebe si la primera parte de los hashes (después del último $
) que desea revertir es diferente para cada valor. En cualquier caso, la existencia de sales significa que una tabla de arco iris pregenerada no va a ayudar.
Por otro lado, un millón de entradas es un espacio de búsqueda bastante pequeño. Bcrypt es un algoritmo de hashing de contraseñas un tanto antiguo (en particular, carece del parámetro de costo de memoria ajustable que tienen las funciones más nuevas, aunque la mayoría de las personas no tienen acceso fácil al hardware que puede forzar su fuerza más rápidamente). Para utilizar simplemente una CPU básica, la dificultad de forzar la fuerza bruta depende del parámetro "costo" o "factor de trabajo". En su ejemplo, esto es 04
(el número entre el segundo y tercer $
), que es bajo para los estándares modernos. Ciertamente, puede forzar la fuerza bruta en cualquier contraseña de 6 dígitos en menos de un día (en el peor de los casos, que requiere un poco menos de 12 hashes por segundo, lo que debería ser fácil al costo 4). Si no están usando sales únicas, esto es equivalente a construir su propia tabla de arco iris y permite revertir todos los hashes.
La construcción de una tabla de arco iris solo consiste en agrupar varias entradas (en este caso, el millón de posibilidades), preservar la contraseña < > Asignación de hash, y clasificación por las salidas de hash. Pueden tomar un tiempo para calcular, dependiendo de cuán lenta sea la función hash (por un "costo" de 4, bastante rápido), cuánto puede paralizarla (si tiene una máquina de múltiples núcleos, cada núcleo puede funcionar) un conjunto diferente de contraseñas; los cachés de CPU modernos no tienen problemas con el costo de memoria de bcrypt), y cuántas entradas está intentando (algunas tablas de arco iris tienen mil millones de entradas; un millón no es nada). También requieren espacio de almacenamiento, pero para una tabla con solo un millón de entradas debería tomar menos de 100 MB de almacenamiento.