PHP - Encriptar email en un enlace url

 
Vista:

Encriptar email en un enlace url

Publicado por carlosVallSego (12 intervenciones) el 30/12/2022 16:35:45
A ver tengo una web que cuando se registra un usuario le mando un link a su correo para que cuando lo pinche se active su cuenta. Entonces con openssl_encrypt se lo encriptó y cuando pincha en el lo recibo mediante POST. El problema viene al desencriptar, cuando recojo la cadena tipo "djphnihrfpvhpi=" y la mando a desencriptar me devuelve null. Pongo código de como sí me funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
function desencriptar($valor,$method,$clave,$iv){
return  openssl_decrypt($valor, $method, $clave, false, $iv);
}
 
function encriptar($valor,$method,$clave,$iv){
return  openssl_encrypt($valor, $method, $clave, false, $iv);
}
 
$email = "CCCCCCCCC@DDD.ES";
$y = encriptar($email, METHOD_ENCRIPT[0], CLAVE_ENCRIPT[0], IV_ENCRIPT);
 
$z = desencriptar($y, METHOD_ENCRIPT[0], CLAVE_ENCRIPT[0], IV_ENCRIPT);
echo $z; //funciona

Ahora imaginar que recojo por POST el correo ya encriptado y se lo asigno a una variable:

$y = "GQAGmUZjTauGYE7GF1Tz145ZZ2bD2b1TC33okzuwSIk="

Y se lo paso al mismo método de arriba pongo el código sin los métodos puesto que no los toco:

1
2
3
$y = "GQAGmUZjTauGYE7GF1Tz145ZZ2bD2b1TC33okzuwSIk=";
 $z = desencriptar($y, METHOD_ENCRIPT[0], CLAVE_ENCRIPT[0], IV_ENCRIPT);
 echo $z; //No funciona

Pues me deja de funcionar. No se por que cuando asigno a una variable la cadena que se va a desencriptar me deja de funcionar. He probado con la función base64_encode y aunque funciona no lo veo seguro, ya que cuando llega el correo puedes ver el código fuente y copiar la parte encriptada copiarla y decodificarla tú mismo. Osea no lo veo nada seguro. Conocéis alguna manera más segura para pasar el correo del usuario en la url
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Encriptar email en un enlace url

Publicado por Jefferson (203 intervenciones) el 31/12/2022 01:28:00
Perdon por mi ignorancia

de donde sale

1
2
3
METHOD_ENCRIPT[0] ??
CLAVE_ENCRIPT[0] ??
IV_ENCRIPT ??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Encriptar email en un enlace url

Publicado por carlosVallSego (12 intervenciones) el 31/12/2022 11:46:13
Hola Jefferson, eso son constantes propias hechas por mi no del PHP. Te pongo un par de ejemplos:

En este caso:

1
define("METHOD_ENCRIPT",array('aes-256-cbc'));

Como puedes ver en PHP admite arrays en las constantes. Si el día de mañana cambio el tipo de encriptamiento solo tengo que ir al archivo de las constantes y cambiarlo ahí.

Te pongo otro ejemplo del nombre de una tabla en MYSQL:

1
define("TBL_DIRECCION", "direccion");

Ahora la select quedaría así:

1
"INSERT INTO ".TBL_DIRECCION." (idDireccion, calle, numeroPortal, ptr, codigoPostal, ciudad, .........

Y por ejemplo el de la conexión a la BBDD:

1
define("DB_PASSWORD", "987654321");

Y la conexión sería:

1
$con = new PDO(DB_DNS, DB_USERNAME, DB_PASSWORD,$utf);

Yo tengo varios archivos para cada tipo de constante. Viene bien por si algún día cambias algo vas directo ahí y no modificas el resto del código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Encriptar email en un enlace url

Publicado por Jefferson (203 intervenciones) el 31/12/2022 14:48:07
Ok postea el código completo para poder ver el error?

quizás venga de las constantes que creas o también puede que no hagas el inclued en el archivo que recibe el post
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Encriptar email en un enlace url

Publicado por carlosVallSego (12 intervenciones) el 01/01/2023 15:42:30
Hola Jefferson, no hay más código. El tema de las constantes ya probé a poner el valor de las constantes directamente en en los métodos. De hecho si lo pruebas funciona como ya he comentado. Deja de funcionar cuando le paso para desencriptar la cadena generada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Encriptar email en un enlace url

Publicado por Jefferson (203 intervenciones) el 02/01/2023 04:16:19
Sin saber el valor que le pasas a las constantes es difícil saber dónde está el error.

Ya que openssl_encrypt veo le pasas un vector de inicialización IV_ENCRIPT que quizás defina el desempeño.

Por otro lado dices el problema lo tienes al recibir por POST

Entonces si el POST no es directamente en el mismo archivo que es donde defines las constantes, al archivo donde envías deberías declarar las mismas constantes o en su defecto haberlas creado en otro archivo ejemplo constantes.php y referenciarlas en el archivo recibe_post.php con un require.

Si no posteas el código completo es difícil emitir una posible solución inventando.

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Encriptar email en un enlace url

Publicado por carlosVallSego (12 intervenciones) el 02/01/2023 23:07:07
Hola Jefferson ya tengo la solución, me la pasaron por STACK OVERFLOW. El problema era que no metía una KEY. Te pongo el script para que veas como funciona. Las líneas que pone SOLUCIÓN es donde estaba el fallo:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// <= Quitar esto para probar /*
$email = "CCCCCCCCC@DDD.ES";
echo "<br>Original String: " . $email;
 
// Store the cipher method
$ciphering = 'aes-256-cbc';//"AES-128-CTR";
// Use OpenSSl Encryption method
$iv_length = openssl_cipher_iv_length($ciphering);
$options = 0;
 
$encryption_iv = '1234567891011121';
// Store the encryption key
$encryption_key = "TuKey"; //SOLUCION
 
$encryption = openssl_encrypt($email, $ciphering,
            $encryption_key, $options, $encryption_iv);
 
echo "<br>Encrypted String: " . $encryption . "\n";
 
 
// Prueba
/* <= Quitar esto para probar*/
$encryption = 'IBKFqI4KD0si27cZTp4V7w==';
$ciphering = "AES-128-CTR";
$options = 0;
 
 
// Non-NULL Initialization Vector for decryption
$decryption_iv = '1234567891011121';
// Store the decryption key
$decryption_key = "TuKey"; //SOLUCION
// Use openssl_decrypt() function to decrypt the data
$decryption=openssl_decrypt ($encryption, $ciphering,
        $decryption_key, $options, $decryption_iv);
 
echo "<br>Decrypted String: " . $decryption;

El resto de código da igual. Ahora me funciona me encripta la url con el correo y id del usuario. Luego corto el string de la url y recupero ambos y los desencripto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Encriptar email en un enlace url

Publicado por Jefferson (203 intervenciones) el 03/01/2023 01:09:33
Hola ya sabía el error lo tenías en la constante IV_ENCRIPT que ahora cambias por variables y sin duda era $decryption_key que deber ser 16

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar