AES 128bit descifrado usando una clave de más de 16 bytes

0

Tengo un pequeño problema con el descifrado AES. Tengo que descifrar un texto que ha sido cifrado usando 128bit AES / ECB con PHP mcrypt. La cuestión es que la clave que se usa para cifrar / descifrar tiene una longitud de 32 bytes en lugar de 16. Todo esto es bueno cuando cifro / descifrado mediante mcrypt, pero ahora tengo que escribir una función de descifrado en otro idioma (LUA). El problema que tengo es que la biblioteca que estoy usando en LUA no admite claves de más de 16 bytes, tiene que tener exactamente 16 bytes de longitud. Supongo que mcrypt internamente transforma claves de más de 16 bytes en una forma de 16 bytes, pero no sé cómo. Lo que estoy tratando de hacer es hacer exactamente la misma transformación de clave en LUA para que mi biblioteca pueda descifrarla. Cambiar la clave es un no ir, ya que fue dado por un proveedor de servicios. Aquí está el código PHP que hace el cifrado / descifrado:

function aes_encrypt($sStr, $sKey = "12345678901234561234567890123456") {
    return base64_encode(mcrypt_encrypt(
        MCRYPT_RIJNDAEL_128,
        $sKey,
        $sStr,
        MCRYPT_MODE_ECB
    ));
}

function aes_decrypt($sStr, $sKey = "12345678901234561234567890123456") {
    $str =  rtrim(mcrypt_decrypt(
        MCRYPT_RIJNDAEL_128,
        $sKey,
        base64_decode($sStr),
        MCRYPT_MODE_ECB
    ),"
function aes_encrypt($sStr, $sKey = "12345678901234561234567890123456") {
    return base64_encode(mcrypt_encrypt(
        MCRYPT_RIJNDAEL_128,
        $sKey,
        $sStr,
        MCRYPT_MODE_ECB
    ));
}

function aes_decrypt($sStr, $sKey = "12345678901234561234567890123456") {
    $str =  rtrim(mcrypt_decrypt(
        MCRYPT_RIJNDAEL_128,
        $sKey,
        base64_decode($sStr),
        MCRYPT_MODE_ECB
    ),"%pre%");
   return preg_replace("/[^\d]/", "", $str); 
}
"); return preg_replace("/[^\d]/", "", $str); }

Cualquier ayuda es muy apreciada.

    
pregunta Tidesson 13.11.2014 - 16:54
fuente

1 respuesta

3
  1. AES de 128 bits tiene claves de 128 bits por definición. Si la clave es de 32 bytes, es AES-256.
  2. Tal vez su clave tenga 32 caracteres hexadecimales, que solo se asignan a 16 bytes o 128 bits.
  3. Tenga en cuenta que todas las variantes de AES se asignan a MCRYPT_RIJNDAEL_128 en php, ya que 128 es el tamaño del bloque y AES tiene bloques de 128 bits independientemente del tamaño de la clave.
  4. Como dijo Xander, tu código es muy débil ya que usa el modo ECB. Utilice el cifrado autenticado en su lugar.
respondido por el CodesInChaos 13.11.2014 - 17:21
fuente

Lea otras preguntas en las etiquetas