Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Desencriptar con AES

Estas en el tema de Desencriptar con AES en el foro de Mysql en Foros del Web. Buenas, Llevo un tiempo dándole vueltas y no sé porque puede pasar esto, la cuestión es que encripto contraseñas de los usuarios con AES, y ...
  #1 (permalink)  
Antiguo 30/04/2008, 12:34
Avatar de pempas  
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 20 años, 4 meses
Puntos: 6
Desencriptar con AES

Buenas,

Llevo un tiempo dándole vueltas y no sé porque puede pasar esto, la cuestión es que encripto contraseñas de los usuarios con AES, y desencripto cuando voy a la ficha de cliente para verlas.

Cuando lo pruebo en mi servidor local de pruebas, encripta y desencripta correctamente mostrándome la password, pero cuando lo subo al servidor no me deja verla, me sale normalmente "???0"

El tema está en que cuando valido con el usuario entra correctamente así que la encriptación la está haciendo de forma correcta en el servidor... no acabo de entenderlo, ¿porque en mi máquina sí que me muestra la contraseña y en el servidor no?

El servidor es un Windows Server 2003 y MySQL 5.0 tanto en el de pruebas como en el del hosting.

¿Puede ser alguna configuración específica de MySQL en mi alojamiento?

Lo más curioso es que la última letra, siempre es la correcta de la contraseña... es decir si la contraseña es "prueba" me muestra "???a" si es "password" me muestra "???d" por eso estoy casi seguro de que es algo de la configuración de MySQL.

Gracias!
  #2 (permalink)  
Antiguo 30/04/2008, 22:15
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Desencriptar con AES

Yo en tu lugar, utilizaría md5. La idea de una contraseña, es que NO se pueda desencriptar ya que es privada.

Si queres continuar con lo que estas haciendo, preguntale a quien le alquilas el hosting, como lo tiene configurado.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 01/05/2008, 09:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Re: Desencriptar con AES

AES (Rijndael) utiliza el mejor código de encriptación hasta ahora desarrollado, y que según se explica en diversos artículos, es el que está en uso por el gobierno de EE.UU. actualmente.
En ese sentido, se lo considera mucho más seguro que el MD5. Y no, el objetivo de un código de encriptación no es que no se lo pueda desencriptar, sino que no se lo pueda quebrar, es decir, que nadie que no tenga la clave de encriptación pueda, a su vez, desencriptarlo.
El nivel de seguridad del aes está plenamente confirmado por documentación (ver documento).
Por todo esto, el problema no tiene que ver con la capacidad de encriptar o desencriptar que el método AES_ENCRYPT tenga. Tu problema puede tener otro origen.
Yo veo dos posibilidades:
1. Existe algún conflicto con las COLLATION usadas en tu base y en el server de internet.
2. Existe algún tipo de problema en cuanto a la longitud de la clave almacenada. Esto lo he visto antes. Para el caso, por ejemplo, aunque tu pongas un password para un user de MySQL de 3 caracteres, la clave encriptada tendrá 41. En el caso de AES, la clave encriptada tendrá como mínimo 16, no importa qué pongas, pero puede tener muchos más (256, según entiendo). ¿Estás almacenando la cantidad correcta de bytes?
  #4 (permalink)  
Antiguo 01/05/2008, 11:03
Avatar de pempas  
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 20 años, 4 meses
Puntos: 6
Re: Desencriptar con AES

Cita:
Iniciado por gnzsoloyo Ver Mensaje
AES (Rijndael) utiliza el mejor código de encriptación hasta ahora desarrollado, y que según se explica en diversos artículos, es el que está en uso por el gobierno de EE.UU. actualmente.
En ese sentido, se lo considera mucho más seguro que el MD5. Y no, el objetivo de un código de encriptación no es que no se lo pueda desencriptar, sino que no se lo pueda quebrar, es decir, que nadie que no tenga la clave de encriptación pueda, a su vez, desencriptarlo.
El nivel de seguridad del aes está plenamente confirmado por documentación (ver documento).
Por todo esto, el problema no tiene que ver con la capacidad de encriptar o desencriptar que el método AES_ENCRYPT tenga. Tu problema puede tener otro origen.
Yo veo dos posibilidades:
1. Existe algún conflicto con las COLLATION usadas en tu base y en el server de internet.
2. Existe algún tipo de problema en cuanto a la longitud de la clave almacenada. Esto lo he visto antes. Para el caso, por ejemplo, aunque tu pongas un password para un user de MySQL de 3 caracteres, la clave encriptada tendrá 41. En el caso de AES, la clave encriptada tendrá como mínimo 16, no importa qué pongas, pero puede tener muchos más (256, según entiendo). ¿Estás almacenando la cantidad correcta de bytes?
Gracias por las respuestas,

Creo que sí que estoy almacenando las claves con la longitud correcta, como comento cuando el usuario hace login que es cuando se usa el AES_ENCRYPT se logea correctamente, por lo que iguala la encriptación de la base de datos con la que entrega el usuario, el problema está en AES_DECRYPT, que tan solo me muestra bien la password cuando estoy en local.

Lo de el Collation si que me suena que puede ser, aunque en principio si hago un backup de la BD y la subo al hosting debería de ser el mismo collation, ¿verdad?

Muchas gracias.
  #5 (permalink)  
Antiguo 01/05/2008, 11:07
Avatar de pempas  
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 20 años, 4 meses
Puntos: 6
Re: Desencriptar con AES

Ahora que miro las bases de datos, el ancho del campo de password es de 41 caracteres y la collation es "latin1_swedish_ci" la que me puso mysql por defecto. ¿puede ser eso?
  #6 (permalink)  
Antiguo 01/05/2008, 14:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Re: Desencriptar con AES

Verificá con el Host, qué está pasando con las collation. La clave del asunto puede estar allí, si el problema se produce durante la transferencia de los datos. Tal vez te convnega el UTF8
  #7 (permalink)  
Antiguo 30/10/2009, 10:24
 
Fecha de Ingreso: enero-2008
Mensajes: 7
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Re: Desencriptar con AES

Cita:
Iniciado por gnzsoloyo Ver Mensaje
AES (Rijndael) utiliza el mejor código de encriptación hasta ahora desarrollado, y que según se explica en diversos artículos, es el que está en uso por el gobierno de EE.UU. actualmente.
En ese sentido, se lo considera mucho más seguro que el MD5. Y no, el objetivo de un código de encriptación no es que no se lo pueda desencriptar, sino que no se lo pueda quebrar, es decir, que nadie que no tenga la clave de encriptación pueda, a su vez, desencriptarlo.
El nivel de seguridad del aes está plenamente confirmado por documentación
Por todo esto, el problema no tiene que ver con la capacidad de encriptar o desencriptar que el método AES_ENCRYPT tenga. Tu problema puede tener otro origen.
Yo veo dos posibilidades:
1. Existe algún conflicto con las COLLATION usadas en tu base y en el server de internet.
2. Existe algún tipo de problema en cuanto a la longitud de la clave almacenada. Esto lo he visto antes. Para el caso, por ejemplo, aunque tu pongas un password para un user de MySQL de 3 caracteres, la clave encriptada tendrá 41. En el caso de AES, la clave encriptada tendrá como mínimo 16, no importa qué pongas, pero puede tener muchos más (256, según entiendo). ¿Estás almacenando la cantidad correcta de bytes?
Estas mezclando peras y manzanas...

MD5 no es un algoritmo de encriptacion bidireccional, es un generador de hash en base a una cadena, donde teoricamente existe un solo hash para cierta cadena dada. Como es Unidireccional no se puede reversar, solo se usa para comparar el resultado almacenado en la BD, con el ingresado por el usuario que se loguea. Es muy seguro desde este punto de vista (ya que ni el adminsitrador del sistema se entera de la clave aunque quiera), pero si pierdes la contraseña, no la puedes recuperar.

La vulnerabilidad de MD5 es sencillamente que se descubre que si existen dos cadenas con el mismo hash, posiblidad remota, pero la hay, y bueno, aun lo suficientemente segura para mortales como nosotros. Si eres el Webmaster de la NASA y tienes MD5, quizas podrias cambiarte a SHA-1 que es el algoritmo de Digest que usa el gobierno de los EU.

Por otra parte, AES es un algoritmo de encriptacion Bidireccional, es decir, dada una cadena, y una llave de encriptacion obtenemos una cadena unica encriptada que puede ser aclarada mediante un proceso inverso. Se considera uno de los algoritmos mas seguros, y efectivamente es utilizado por el Gobierno de los EU, sin embargo no en la longitud de clave que viene por defecto en MySQL. MySQL usa longitudes de clave de 128-bits, enchulable (mediante recompilacion) a 256-bits, lo cual se que la mayoria no acostumbra hacer, porque al sano juicio de un webmaster que no esta en la cuspide de la seguridad gubernamental no le es necesario.

Tu problema seria mejor analizado si nos pegaras el codigo involucrado, tengo la intuicion de que has usado campos text para almacenar datos encriptados.

Considera que AES guarda los datos en la BD en formato binario, por lo tanto es apropiado usar campos tipo BLOB.

Pero insisto, peganos tu codigo aqui, vale?
  #8 (permalink)  
Antiguo 30/10/2009, 10:33
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Desencriptar con AES

Muy buena la explicación... pero te fijaste en la fecha de los post?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 30/10/2009, 11:23
 
Fecha de Ingreso: enero-2008
Mensajes: 7
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Desencriptar con AES

Cita:
Iniciado por huesos52 Ver Mensaje
Muy buena la explicación... pero te fijaste en la fecha de los post?
no, jejejeje, bueno, mas vale tarde que nunca.

Gracias.
  #10 (permalink)  
Antiguo 30/01/2010, 10:47
 
Fecha de Ingreso: julio-2004
Mensajes: 3
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Desencriptar con AES

La máquina del tiempo.... 30-01-2010
  #11 (permalink)  
Antiguo 15/06/2010, 10:04
 
Fecha de Ingreso: julio-2009
Mensajes: 11
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Desencriptar con AES

Señores tengo esta pregunta, tal vez puedan resolverla:
es si se puede usar aes en una bd sql server, dado q quiro usarla en php con pdo, y no se si usarla, gracias por la respuesta.
  #12 (permalink)  
Antiguo 15/06/2010, 10:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Desencriptar con AES

Sería mucho mejor que fueras directamente al manual de referencia de SQL Server: Cifrado de SQL Server, porque la cosa es cómo se hace en ese DBMS y no si se usa una u otra cosa...
Allí vas a encontrar esta explicación:
Cita:
Los algoritmos de cifrado definen transformaciones de datos que los usuarios no autorizados no pueden revertir con facilidad. SQL Server permite a los administradores y los programadores elegir entre varios algoritmos, incluidos DES, Triple DES, TRIPLE_DES_3KEY, RC2, RC4, RC4 de 128 bits, DESX, AES de 128 bits, AES de 192 bits y AES de 256 bits.
Pero, como te dije, el problema es saber cómo lo implementa SQL Server...: Descripción del Cifrado de datos transparente (TDE)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 15/06/2010, 11:37
 
Fecha de Ingreso: julio-2009
Mensajes: 11
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Desencriptar con AES

_ La respuesta fue investigar, que de hecho ya lo habia dicho en mi post anterior a lo que agregaria que no se puede en sql server, es decir no se puede:
INSERT INTO TABLA (user, pass) VALUES ('usuario1',AES_ENCRYPT('palabra_secreta','mipass' ))

Gracias de todos modos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:32.