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.