Convertir una base de datos de 1,000,000 de filas

7

Si tengo una base de datos que almacena las credenciales de inicio de sesión de 1,000,000 de usuarios en PLAINTEXT, ¿cuánto esfuerzo me llevará a md5 hash estas contraseñas?

    
pregunta mahen23 03.06.2011 - 13:22

3 respuestas

19

Por favor, no lo conviertas a MD5; no se considera un esquema de hashing seguro .

Si vas a convertirlos en otra cosa; luego sugeriría leer sobre Seguridad de contraseña . El tema es demasiado largo para entrar en detalles aquí.

Además, ¿podría decirnos a la compañía para que podamos asegurarnos de no almacenar nuestras credenciales allí?

    
respondido por el George Stocker 03.06.2011 - 14:35
11

Tu esfuerzo = igual que si fueran 10 filas. Solo convierte uno y ponlo en un bucle.

esfuerzo de las computadoras = esfuerzo (tiempo) de convertir una fila * 1000000

El tiempo de ejecución exacto de crear un md5 a partir de texto sin formato es un valor medible. El tiempo exacto de ejecución para convertirlos a todos es predecible desde el primer resultado.

Reconozco que su propio esfuerzo en realidad se destinará principalmente a otras partes de su sistema de inicio de sesión y no a esta, como la contraseña olvidada y similares. P.ej. Si el sistema anterior solía enviar la contraseña exacta a los usuarios, deberá reemplazarla con una función de restablecimiento de contraseña.

    
respondido por el Goran Jovic 03.06.2011 - 13:26
3

Después de algunos retoques, generé para ti una solución rápida y sucia

CONSIDERACIONES ANTES DE HACER ESTE ::

  1. Primero cree una copia de seguridad de su mesa, (Al usar este código usted se responsabiliza por todos los daños )
  2. En segundo lugar, como lo mencionaron otros usuarios, considere un hash diferente que no sea MD5
  3. Considere el comentario de Thorbjørn Ravn Andersen sobre cómo realizar confirmaciones y retrotrusiones y actualice el código provisto en consecuencia.
  4. Finalmente, considere agregar sal y pimienta para darle sabor.

El concepto básico:

SQL::
1  UPDATE 
2      TABLE AS TARGET
3  INNER JOIN 
4      TABLE AS SOURCE
5  ON 
6      TARGET.id = SOURCE.id
7  SET
8      TARGET.[password_field_name] = md5(SOURCE.[password_field_name])
9  WHERE 
10     TARGET.id = SOURCE.id

Lo que esto hace esencialmente es vincular la tabla con la contraseña a sí misma con una unión interna. Utiliza los alias (Target y Source) para diferenciar las dos copias de la tabla. Luego, utilizando la sintaxis de actualización regular de sql, la instrucción Set en las líneas 7 y 8 hace que el campo de contraseña en la tabla original sea igual al hash MD5 de la misma contraseña. Para asegurarnos de que este sql solo actúe por fila, establecemos la instrucción where usando la clave principal de la tabla.

    
respondido por el Mallow 03.06.2011 - 23:34

Lea otras preguntas en las etiquetas