Decrittografia AES a 128 bit utilizzando una chiave più lunga di 16 byte

0

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.

    
posta Tidesson 13.11.2014 - 16:54
fonte

1 risposta

3
  1. 128 bit AES ha 128 bit di chiavi per definizione. Se la chiave è 32 byte, è AES-256.
  2. Forse la tua chiave è composta da 32 caratteri esadecimali, che si associano solo a 16 byte o 128 bit.
  3. Si noti che tutte le varianti di AES, mappano a MCRYPT_RIJNDAEL_128 in php, poiché 128 è la dimensione del blocco e AES ha blocchi da 128 bit indipendentemente dalla dimensione della chiave.
  4. Come ha detto Xander, il tuo codice è molto debole poiché utilizza la modalità ECB. Utilizza invece la crittografia autenticata.
risposta data 13.11.2014 - 17:21
fonte

Leggi altre domande sui tag