Ho avuto un piccolo problema riguardo alla decrittazione di AES. Devo decodificare un testo che è stato crittografato con AES / ECB a 128 bit con PHP mcrypt. Il fatto è che la chiave usata per cifrare / decifrare è lunga 32 byte invece di 16. Questo è tutto a posto quando criptico / decifrato tramite mcrypt, ma ora devo scrivere una funzione di decrittografia in un'altra lingua (LUA). Il problema che ho è che la libreria che sto usando in LUA non supporta chiavi più lunghe di 16 byte, deve essere esattamente lunga 16 byte. Immagino che mcrypt trasformi internamente chiavi più lunghe di 16 byte in un formato a 16 byte, ma non so come. Quello che sto cercando di fare è eseguire esattamente la stessa trasformazione della chiave in LUA in modo che la mia libreria possa decrittografarla. Cambiare la chiave è un no, come è stato dato da un fornitore di servizi. Ecco il codice PHP che esegue la crittografia / decrittografia:
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);
}
Qualsiasi aiuto è molto apprezzato.