Domanda

Sto cercando di crittografare una stringa, lungo 50-150 caratteri, con AES in un modo diverso da BCE (a causa di problemi di sicurezza). Ho scritto una classe di crittografia e sono in grado di cifrare / decifrare perfettamente in modalità BCE, tuttavia quando passo alla modalità OFB CBC, CTR o, non riesco a ottenere il testo in chiaro posteriore originale.

Fonte:

define('DEFAULT_ENCRYPTION_KEY', 'asdHRMfjkahguglw84tlrogl9y8kamaFDaufasds');

class Encryption
    {
    private $mode   = 'ctr';
    private $algo   = 'rijndael-128';
    private $td     = null;

    function __construct($key = DEFAULT_ENCRYPTION_KEY)
        {
        $this->td = mcrypt_module_open($this->algo, '', $this->mode, '');
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($this->td), MCRYPT_DEV_URANDOM);
        $key = substr($key, 0, mcrypt_enc_get_key_size($this->td));
        mcrypt_generic_init($this->td, $key, $iv);
        }

    public function encrypt($data)
        {
        $encrypted_data = mcrypt_generic($this->td, $data);
        return $encrypted_data;
        }   

    public function decrypt($data)
        {
        $decrypted_data = mdecrypt_generic($this->td, $data);
        $decrypted_data = rtrim($decrypted_data, "\0");
        return $decrypted_data;
        }

    function __destruct()
        {
        mcrypt_generic_deinit($this->td);
        mcrypt_module_close($this->td);
        }

    }

$crypt1 = new Encryption();
$enc = $crypt1->encrypt('hello world');

$crypt2 = new Encryption();
$dec = $crypt2->decrypt($enc);

echo $dec;

Il valore restituito $ dicembre, non è uguale a 'ciao mondo'.

Tutte le idee?

È stato utile?

Soluzione

Sembra che si vuole rottamare il vettore di inizializzazione, $iv. Avrai bisogno di conoscere il IV per decifrare correttamente il messaggio. La IV non è un segreto; di solito è passato insieme con il testo cifrato in una sorta di formato avvolgente.

Perché non c'è un feedback da un blocco all'altro, BCE non ha bisogno di un vettore di inizializzazione. Ma le modalità block chaining bisogno di alcuni dati di "bootstrap", la modalità di cifratura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top