Frage

Ich habe eine verschlüsselte wenig Text, den ich entschlüsseln müssen. Es ist mit AES-256-CBC verschlüsselt. Ich habe den verschlüsselten Text, Schlüssel, und iv. Doch egal, was ich versuche, ich kann einfach nicht scheinen, um es zu arbeiten.

Das Internet hat vorgeschlagen, dass mcrypt der Rijndael Chiffre der Lage sein sollte, dies zu tun, also hier ist was ich jetzt habe:

function decrypt_data($data, $iv, $key) {
    $cypher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

    // initialize encryption handle
    if (mcrypt_generic_init($cypher, $key, $iv) != -1) {
        // decrypt
        $decrypted = mdecrypt_generic($cypher, $data);

        // clean up
        mcrypt_generic_deinit($cypher);
        mcrypt_module_close($cypher);

        return $decrypted;
    }

    return false;
}

Wie es jetzt aussieht ich 2 Warnungen und der Ausgang ist Kauderwelsch:

Warning: mcrypt_generic_init() [function.mcrypt-generic-init]: Key size too large; supplied length: 64, max: 32 in /var/www/includes/function.decrypt_data.php on line 8
Warning: mcrypt_generic_init() [function.mcrypt-generic-init]: Iv size incorrect; supplied length: 32, needed: 16 in /var/www/includes/function.decrypt_data.php on line 8

Jede mögliche Hilfe würde geschätzt.

War es hilfreich?

Lösung

Ich bin nicht schrecklich mit diesem Zeug vertraut, aber es scheint, wie MCRYPT_RIJNDAEL_256 anstelle von MCRYPT_RIJNDAEL_128 versucht, einen offensichtlichen nächsten Schritt wäre ...

Edit: Sie haben recht - das ist nicht das, was Sie brauchen. MCRYPT_RIJNDAEL_128 ist in der Tat die richtige Wahl. Nach dem Link, den Sie zur Verfügung gestellt, Ihr Schlüssel und IV ist doppelt so lang, wie sie sein sollte:

// How do you do 256-bit AES encryption in PHP vs. 128-bit AES encryption???
// The answer is:  Give it a key that's 32 bytes long as opposed to 16 bytes long.
// For example:
$key256 = '12345678901234561234567890123456';
$key128 = '1234567890123456';

// Here's our 128-bit IV which is used for both 256-bit and 128-bit keys.
$iv =  '1234567890123456';

Andere Tipps

ich zu Ihnen ein Beispiel, Bitte überprüfen Sie den Code, ok

$data_to_encrypt = "2~1~000024~0910~20130723092446~T~00002000~USD~F~375019001012120~0~0~00000000000~";
$key128 = "abcdef0123456789abcdef0123456789";
$iv = "0000000000000000";

$cc = $data_to_encrypt;
$key = $key128;
$iv =  $iv;
$length = strlen($cc);

$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'','cbc','');

mcrypt_generic_init($cipher, $key, $iv);
$encrypted = base64_encode(mcrypt_generic($cipher,$cc));
mcrypt_generic_deinit($cipher);

mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mdecrypt_generic($cipher,base64_decode($encrypted));
mcrypt_generic_deinit($cipher);

echo "encrypted: " . $encrypted;
echo "<br/>";
echo "length:".strlen($encrypted);
echo "<br/>";
echo "decrypted: " . substr($decrypted, 0, $length);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top