Frage

Ich versuche, eine Zeichenfolge zu verschlüsseln, 50-150 Zeichen lang, mit AES in einem anderen Modus als EZB (aufgrund von Sicherheitsproblemen). Ich schrieb eine Verschlüsselungs Klasse und bin in der Lage perfekt im ECB-Modus zum Verschlüsseln / Entschlüsseln, aber wenn ich auf CBC, CTR oder OFB-Modus wechseln, ich nicht wieder den ursprünglichen Klartext erhalten.

Quelle:

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;

Der Rückgabewert $ Dezember, ist nicht gleich 'Hallo Welt'.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Es sieht aus wie Sie den Initialisierungsvektor, $iv sind zu verwerfen. Sie finden die IV wissen müssen, um erfolgreich die Nachricht zu entschlüsseln. Der IV wird nicht geheim; es ist in der Regel zusammen mit dem verschlüsselten Text in irgendeiner Art von Kuvertierung Format übergeben.

Weil es keine Rückmeldung von Block zu Block, wird der EZB nicht einen Initialisierungsvektor benötigen. Aber Block Chaining-Modi müssen einige Daten „Bootstrap“, um den Verschlüsselungs-Modus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top