Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.1K
Views
No se puede AES_DECRYPT (MySQL) una cadena encriptada con openssl_encrypt (PHP)

Estoy usando un script PHP para encriptar cadenas usando el cifrado "aes-256-cbc". Esas cadenas se almacenan en una base de datos MySQL y me gustaría que MySQL las descifre.

Aquí está mi función de cifrado PHP:

 function encrypt($token) { if($token !== "" && $token !== null && $token !== false) { $cipher_method = 'aes-256-cbc'; $iv = "98awg9X7SiI3jxp3"; $enc_key = hash("sha256", "Pn6nK7Gs9r"); $crypted_token = openssl_encrypt($token, $cipher_method, $enc_key, 0, $iv); return $crypted_token; } return $token; } echo hash("sha256", "Pn6nK7Gs9r"); // output 67fa26a5570901994ef1eae105b9286fca44b6f79e200a9fbbd5cff897c3a7ce echo encrypt("test"); // output Xq1CcrpteSqcybePun+6pQ==

Aquí está mi secuencia de comandos MySQL:

 SET block_encryption_mode = 'aes-256-cbc'; SET @key_str = SHA2('Pn6nK7Gs9r',256); SET @init_vector = "98awg9X7SiI3jxp3"; SET @encrypted = "Xq1CcrpteSqcybePun+6pQ=="; SELECT @key_str; # output 67fa26a5570901994ef1eae105b9286fca44b6f79e200a9fbbd5cff897c3a7ce SELECT AES_DECRYPT(@encrypted,@key_str,@init_vector); # output NULL SELECT cast(AES_DECRYPT(@encrypted,@key_str,@init_vector) as char(100)); # output NULL SELECT AES_DECRYPT(cast(@encrypted as BINARY),@key_str,@init_vector); # output NULL SELECT cast(AES_DECRYPT(cast(@encrypted as BINARY),@key_str,@init_vector) as char(100)); # output NULL

Como puede ver, siempre da NULL. (resultado esperado: prueba). Probé otras cosas:

 SET block_encryption_mode = 'aes-256-cbc'; SET @key_str = SHA2('Pn6nK7Gs9r',256); SET @init_vector = "98awg9X7SiI3jxp3"; SET @string = "test"; SELECT AES_ENCRYPT(@string,@key_str,@init_vector); # output [BLOB - 16 B] SELECT cast(AES_ENCRYPT(@string,@key_str,@init_vector) as char(100)); # output empty value

Habría esperado que AES_ENCRYPT devolviera una cadena cifrada (Xq1CcrpteSqcybePun+6pQ==). Qué estoy haciendo mal ?

Gracias de antemano por tu ayuda.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Primero, cuando calcula el hash, debe recuperar el valor binario para obtener exactamente 256 bits. Para hacer eso en PHP, pase true a hash() .

 <?php function encrypt($token) { $cipher_method = 'aes-256-cbc'; $iv = '98awg9X7SiI3jxp3'; $key = hash('sha256', 'Pn6nK7Gs9r', true); $crypted_token = openssl_encrypt($token, $cipher_method, $key, 0, $iv); return $crypted_token; } echo encrypt('test'); ?>

Producción:

 5EMRiQCvOjQjNSlwpYKyfQ==

Tenga en cuenta que el resultado está codificado en Base64.

En MySQL, para obtener el valor binario del hash, use UNHEX() . Para decodificar la cadena Base64, use FROM_BASE64() .

 SET block_encryption_mode = 'aes-256-cbc'; SET @key = UNHEX(SHA2('Pn6nK7Gs9r',256)); SET @iv = '98awg9X7SiI3jxp3'; SET @ciphertext = FROM_BASE64('5EMRiQCvOjQjNSlwpYKyfQ=='); SELECT AES_DECRYPT(@ciphertext, @key, @iv);

Producción:

 test
over 4 years ago · Santiago Trujillo Report

0

CAST(AES_ENCRYPT(....) AS CHAR) es el problema. AES_ENCRYPT devuelve datos "binarios", no fechas de "caracteres".

Xq1CcrpteSqcybePun+6pQ== parece generar la salida de TO_BASE64(...) .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!