Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Encriptación cifrado 3DES

Estas en el tema de Encriptación cifrado 3DES en el foro de PHP en Foros del Web. Hola a todos! Veréis, tengo que realizar unos cambios en la encriptación que usaba para comunicarme con un TPV virtual (antes usaba el sha1 pero ...
  #1 (permalink)  
Antiguo 10/11/2015, 02:08
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 13 años, 8 meses
Puntos: 14
Exclamación Encriptación cifrado 3DES

Hola a todos!

Veréis, tengo que realizar unos cambios en la encriptación que usaba para comunicarme con un TPV virtual (antes usaba el sha1 pero por motivos de seguridad los están cambiando a una encriptación sha2).

En los pasos para adaptarlo, me piden un cifrado 3DES de una serie de valores pero nunca he usado ese tipo de cifrado. Viendo la documentación de php aquí hay que usar la función mcrypt pero hay algunas cosas que no entiendo.

- Mi código actual es el siguiente:
Código PHP:
Ver original
  1. $keyOperacion = mcrypt_encrypt(MCRYPT_3DES,$valor1,$valor2,MCRYPT_MODE_CFB);

Esto me hace que salte un error diciendo que no se puede inicializar el módulo...

- Leyendo un poco más de la documentación, necesito un valor (que llaman casi en toda la documentación "IV") que es como una especie de clave para realizar el cifrado.
Visto esto le añado a mi código lo siguiente:
Código PHP:
Ver original
  1. $size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CFB);
  2. $iv = mcrypt_create_iv($size,MCRYPT_RAND);// Variable IV para mcrypt
  3. $keyOperacion = mcrypt_encrypt(MCRYPT_3DES,$valor1,$valor2,MCRYPT_MODE_CFB,$iv);
Pero me saca un error diciendo "The IV parameter must be as long as the blocksize"... la verdad que me tiene ya un poco negro

Me tiene un poco perdido (quizás los ejemplos que encuentro en la documentación de PHP me marean más que otra cosa )

Si pudiéseis echarme una mano en los pasos a seguir para dicho cifrado os lo agradezco!
Saludos!
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"
  #2 (permalink)  
Antiguo 10/11/2015, 03:09
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Encriptación cifrado 3DES

Saludo
Cerca.

El asunto está en que para calcular el size, tiene que ser sobre el mismo
tamaño del tipo de encriptación.

Es decir, en el ej se está calculando el size con MCRYPT_CAST_256,
pero luego se quiere encriptar con MCRYPT_3DES, por eso el warning.

Ante eso, la solución es calcular el size con MCRYPT_3DES también.

(P.P: ¡Acabo de darme cuenta que tenemos casí la misma signature!)
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 23/11/2015, 03:35
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 13 años, 8 meses
Puntos: 14
Respuesta: Encriptación cifrado 3DES

Cita:
Iniciado por mortiprogramador Ver Mensaje
Saludo
Cerca.

El asunto está en que para calcular el size, tiene que ser sobre el mismo
tamaño del tipo de encriptación.

Es decir, en el ej se está calculando el size con MCRYPT_CAST_256,
pero luego se quiere encriptar con MCRYPT_3DES, por eso el warning.

Ante eso, la solución es calcular el size con MCRYPT_3DES también.

(P.P: ¡Acabo de darme cuenta que tenemos casí la misma signature!)
Hola! Gracias por la respuesta mortiprogramador y perdona la tardanza pero he estado liado no...lo siguiente!

He vuelto a retomar el tema de la encriptación y he solucionado ese warning (al menos eso creo xD) pero ahora me salta un warning diciendo que el tamaño de la cadena al encriptar.

Código PHP:
Ver original
  1. Warning: mcrypt_encrypt(): Size of key is too large for this algorithm in line 80

No se si es por algún valor de las constantes que hay que usar o no sé

El código que tengo es el siguiente

Código PHP:
Ver original
  1. // Clave
  2. $myKey = "1e1r1r1t1y1y1g1g1g1g1g1345678910"; // ejemplo de key...tiene un tamaño de 32 caracteres
  3. // Tamanio Encripyt ....
  4. $iv_size = mcrypt_get_iv_size(MCRYPT_3DES,MCRYPT_MODE_CBC); // Tamanio Key -> Esto me devuleve 8
  5. $iv = mcrypt_create_iv($iv_size,MCRYPT_RAND);
  6.  
  7. // Encripta
  8. $stringEncrypted = mcrypt_encrypt(MCRYPT_3DES,$myKey,$numpedido,MCRYPT_MODE_CBC,$iv); // Aquí es el warning que comentaba previamente

Y ahí es donde se muere el código por el Warning
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"

Última edición por madman_18; 23/11/2015 a las 05:08
  #4 (permalink)  
Antiguo 23/11/2015, 16:52
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Encriptación cifrado 3DES

Saludo.
Eso es porque el key es muy extenso para el tipo de encriptación.

Un key aceptable podría ser
Código PHP:
Ver original
  1. $myKey = "1e1rlrltlylylgl345678910";
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 24/11/2015, 02:02
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 13 años, 8 meses
Puntos: 14
Respuesta: Encriptación cifrado 3DES

Cita:
Iniciado por mortiprogramador Ver Mensaje
Saludo.
Eso es porque el key es muy extenso para el tipo de encriptación.

Un key aceptable podría ser
Código PHP:
Ver original
  1. $myKey = "1e1rlrltlylylgl345678910";
Eso he estado revisando aunque no entiendo por qué me dan esa longitud de clave

He visto algunos códigos que lo usan y el tamaño de la key lo meten como a NULL (se generan como unos valores que darían como resultado NULL o a 0)

En un principio según la documentación habría que usar algo tipo
Código PHP:
Ver original
  1. $iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
  2. $iv = mcrypt_create_iv($iv_size)
O estoy muy equivocado?
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"
  #6 (permalink)  
Antiguo 24/11/2015, 05:35
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Encriptación cifrado 3DES

Cita:
Iniciado por madman_18 Ver Mensaje
Eso he estado revisando aunque no entiendo por qué me dan esa longitud de clave

He visto algunos códigos que lo usan y el tamaño de la key lo meten como a NULL (se generan como unos valores que darían como resultado NULL o a 0)

En un principio según la documentación habría que usar algo tipo
Código PHP:
Ver original
  1. $iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
  2. $iv = mcrypt_create_iv($iv_size)
O estoy muy equivocado?

Saludo.
Pues no estas equivocado en cuanto a ese detalle, es decir,
también se puede crear el $iv de ese modo, pero sin embargo
eso no cambiará el hecho que $myKey era muy extensa para
el tipo de encriptación, razón por la cual debe ser un poco más corta,
otra solución podría ser crear una key aleatoria que combine
varios caracteres pero que no pase de la longitud adecuada,
es decir, el length de la que te dejé, o pues la más drástica
que sería cambiar de tipo de encriptación.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 24/11/2015, 05:43
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 13 años, 8 meses
Puntos: 14
Respuesta: Encriptación cifrado 3DES

Cita:
Iniciado por mortiprogramador Ver Mensaje

Saludo.
Pues no estas equivocado en cuanto a ese detalle, es decir,
también se puede crear el $iv de ese modo, pero sin embargo
eso no cambiará el hecho que $myKey era muy extensa para
el tipo de encriptación, razón por la cual debe ser un poco más corta,
otra solución podría ser crear una key aleatoria que combine
varios caracteres pero que no pase de la longitud adecuada,
es decir, el length de la que te dejé, o pues la más drástica
que sería cambiar de tipo de encriptación.
El problema reside en que la key es generada a ese tamaño (me la facilitan ya que es para el tema de la actualización de los TPV y no puedo tocarla ni acortarla) y la encriptación que requieren también debe ser esa.

Algunos códigos que he estado viendo por ahí la "solución" que le dan a este tipo de problema es asignarle al valor de $iv un valor NULL y que así lo ignore...(no creo que sea muy buena práctica la verdad...). Este tipo de encriptación me está ya....
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"
  #8 (permalink)  
Antiguo 24/11/2015, 06:03
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Encriptación cifrado 3DES

Cita:
Iniciado por madman_18 Ver Mensaje
El problema reside en que la key es generada a ese tamaño (me la facilitan ya que es para el tema de la actualización de los TPV y no puedo tocarla ni acortarla) y la encriptación que requieren también debe ser esa.

Algunos códigos que he estado viendo por ahí la "solución" que le dan a este tipo de problema es asignarle al valor de $iv un valor NULL y que así lo ignore...(no creo que sea muy buena práctica la verdad...). Este tipo de encriptación me está ya....
Saludo.
Jajajajaja, ¡todo en contra!

Pues en ese caso, propongo que en vez del NULL, se deje como estaba,
pero se haga el mcrypt_encrypt con una @ antes, es decir, @mcrypt_encrypt,
y con eso se indica que lo haga a pesar que no sea lo más adecuado.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 25/11/2015, 02:23
Avatar de madman_18  
Fecha de Ingreso: agosto-2010
Mensajes: 792
Antigüedad: 13 años, 8 meses
Puntos: 14
Respuesta: Encriptación cifrado 3DES

Cita:
Iniciado por mortiprogramador Ver Mensaje
Saludo.
Jajajajaja, ¡todo en contra!

Pues en ese caso, propongo que en vez del NULL, se deje como estaba,
pero se haga el mcrypt_encrypt con una @ antes, es decir, @mcrypt_encrypt,
y con eso se indica que lo haga a pesar que no sea lo más adecuado.
Eso creo que haré...ya al menos tengo dos vías para "solucionarlo". No entiendo cómo aplican ese filtro si saben que no cumple con la longitud que dan en la key...en fin...

Gracias por tu ayuda!
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, te convertes en algo muy diferente"

Etiquetas: cifrado, variable
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 03:50.