OpenSSL_encrypt devolviendo un cyphertext incorrecto?

0

Estoy tratando de usar la función openssl_encrypt en PHP, este es mi código:

<?php

$message = hex2bin("00112233445566778899aabbccddeeff");
$key = hex2bin("000102030405060708090a0b0c0d0e0f");
$method = "AES-128-ECB";

$cyphertext = openssl_encrypt($message, $method, $key);
echo bin2hex(base64_decode($cyphertext)) . "\n";

?>

Según FIPS 197 (consulte la página 35) y también this AES Calculator en línea , esto debería resultar en el siguiente cyphertext:

69c4e0d86a7b0430d8cdb78070b4c55a

pero en cambio mi código devuelve esta cadena:

69c4e0d86a7b0430d8cdb78070b4c55a954f64f2e4e86e9eee82d20216684899

¿Qué estoy haciendo mal? ¿La implementación de openssl utiliza un tamaño de bloque diferente?

Y sí, sé que no debo utilizar el BCE, pero esto es solo para fines de prueba, tan pronto como haya descubierto por qué esto no funciona, cambiaré a CBC.

Muchas gracias por tu ayuda.

    
pregunta Pascal Sommer 19.03.2016 - 22:17
fuente

1 respuesta

4

Para citar de los comentarios de los documentos php , énfasis por mí:

  

En inglés simple, el búfer se debe rellenar hasta blockSize. Si el   el búfer ya es un múltiplo de blockSize, agrega un nuevo entero   BlockSize bytes como relleno.

     

El valor de los bytes de relleno DEBE ser el número de bytes de relleno como   un byte ...

     

Entonces, 5 bytes de relleno darán como resultado los siguientes bytes agregados en la   Fin del texto cifrado: [0x05] [0x05] [0x05] [0x05] [0x05]

     

Espero que esto salve a alguien más unas pocas horas de su vida.

Su mensaje es un bloque completo. Por lo tanto, la implementación de openssl_encrypt agrega un bloque de relleno. Esta es la razón por la que la segunda mitad de su resultado (que no esperaba) se desencripta perfectamente

0x10101010101010101010101010101010

usar aes simples con esa clave: es un relleno agregado por la implementación, porque aes simples no es lo mismo que aes-cbc.

    
respondido por el Tobi Nary 19.03.2016 - 23:33
fuente

Lea otras preguntas en las etiquetas