2012-01-02 29 views
6

Quiero almacenar detalles de perfil encriptados dentro de una base de datos. Sin embargo, algunos detalles deben ser únicos, y dado que el algoritmo de encriptación aleatoriza la semilla para cada encriptación, es exhaustivo determinar si el valor ya está almacenado en la base de datos.¿Cómo comparar cadenas encriptadas con semillas aleatorias?

  • Podría recorrer cada fila y descifrar la columna necesaria, pero eso llevaría demasiado tiempo si el número de filas es grande.
  • Podría almacenar hashes de estos detalles (no cifrados) pero eso mataría el punto de encriptación en primer lugar.

Entonces, ¿cómo puedo comparar una cadena encriptada (con semilla aleatoria) con otras guardadas en la base de datos?

Cualquier ayuda es muy apreciada. La encriptación se realiza con php (MCRYPT_RIJNDAEL_256/NOFB), la base de datos es MySQL.

Edición/solución: El almacenamiento del hash de datos además del valor encriptado parece ser mi mejor solución. Eso hace que la validación de columnas únicas sea lo suficientemente fácil para mí. Gracias a todos por dejar sus comentarios/respuestas.

+0

Interesante pregunta, aunque no creo que haya una respuesta más allá de "almacenarlos sin cifrar en una columna separada" ... Pero veremos –

+1

Usaría el hash con una sal dependiente del usuario, como su nombre de usuario De esta forma, si se conoce un campo de perfil para un usuario, no se puede deducir otro usuario que tenga el mismo valor no expresado en ese campo, ya que su hash será diferente. – halfer

+0

@Pekka sí, veamos ... – Alasjo

Respuesta

3

Has elegido un algoritmo que no proporciona una capacidad que ahora dices que necesitas. Debe elegir sus requisitos antes de para elegir un algoritmo.

+1

Bueno, no es demasiado tarde para cambiar el algoritmo, ¿alguna sugerencia? – Alasjo

+1

Utilice el mismo valor de inicialización para cada contraseña o utilice dos esquemas de seguimiento separados, uno solo para capturar duplicados (¡eso no hace un seguimiento de qué usuario tiene la contraseña!) Y uno para la autenticación (que sí lo hace). –

+0

La pregunta no era sobre las contraseñas, pero veo la necesidad de un conjunto de datos por separado para la comparación. Gracias. – Alasjo

Cuestiones relacionadas