Maison > développement back-end > tutoriel php > Puis-je migrer mon chiffrement de Mcrypt vers OpenSSL et décrypter les données chiffrées par Mcrypt à l'aide d'OpenSSL ?

Puis-je migrer mon chiffrement de Mcrypt vers OpenSSL et décrypter les données chiffrées par Mcrypt à l'aide d'OpenSSL ?

Barbara Streisand
Libérer: 2024-12-05 07:16:11
original
876 Les gens l'ont consulté

Can I Migrate My Encryption from Mcrypt to OpenSSL, and Decrypt Mcrypt-Encrypted Data Using OpenSSL?

Mise à niveau de ma bibliothèque de chiffrement de Mcrypt vers OpenSSL

Puis-je mettre à niveau ma bibliothèque de chiffrement de Mcrypt vers OpenSSL ? Dans OpenSSL, est-il possible de décrypter les données cryptées avec Mcrypt ? Deux articles différents fournissent des informations contradictoires.

Question : Est-il possible de mettre à niveau ma bibliothèque de chiffrement de Mcrypt vers OpenSSL ? Si oui, comment ?

Réponse : Oui, il est possible de mettre à niveau votre bibliothèque de chiffrement de Mcrypt vers OpenSSL.

Question : Puis-je décrypter les données cryptées avec Mcrypt en utilisant OpenSSL ?

Réponse : Oui, il est possible de décrypter des données cryptées avec Mcrypt à l'aide d'OpenSSL.

Voici un exemple de code montrant comment décrypter des données cryptées avec Mcrypt à l'aide d'OpenSSL :

public function decrypt($data, $key) {
    $salt = substr($data, 0, 128);
    $enc = substr($data, 128, -64);
    $mac = substr($data, -64);

    list ($cipherKey, $macKey, $iv) = $this->getKeys($salt, $key);

    if ($mac !== hash_hmac('sha512', $enc, $macKey, true)) {
        return false;
    }

    $dec = openssl_decrypt($enc, $this->cipher, $cipherKey, OPENSSL_RAW_DATA, $iv);

    return $dec;
}
Copier après la connexion

Remarques supplémentaires :

  • La fonction openssl_decrypt() nécessite le Le paramètre iv doit avoir la même longueur que la taille de bloc du chiffrement utilisé.
  • Si le paramètre iv n'a pas la même longueur que la taille de bloc du chiffrement utilisé, vous devrez utiliser openssl_decrypt( ) fonctionnent en mode CBC.

Test :

Le code suivant peut être utilisé pour tester la fonction decrypt() :

$keys = [
    'this is a secret key.',
    'G906m70p(IhzA5T&5x7(w0%a631)u)%D6E79cIYJQ!iP2U(xT13q6)tJ6gZ3D2wi&0")7cP5',
    chr(6) . chr(200) . chr(16) . 'my key ' . chr(3) . chr(4) . chr(192) . chr(254) . ' zyx0987!!',
    'and finally one more key to test with here:',
];


$data = [
    'A',
    'This is a test',
    'now test encrypting something a little bit longer with 1234567890.',
    '$length = mcrypt_get_block_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC); $last = ord($data[strlen($data) - 1]);',
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sit amet pharetra urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut fringilla, quam sed eleifend eleifend, justo turpis consectetur tellus, quis tristique eros erat at nibh. Nunc dictum neque vel diam molestie fermentum. Pellentesque dignissim dui quis tortor eleifend, ut maximus elit egestas. Donec posuere odio et auctor porta. Quisque placerat condimentum maximus. Curabitur luctus dolor eget sem luctus, in dignissim tortor venenatis. Mauris eget nulla nisl.',
];

$failures = 0;

foreach ($data as $datum) {
    foreach ($keys as $key) {
        $enc = new Encryption(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);

        $encrypted = $enc->encrypt($datum, $key);

        $dec = new EncryptionOpenSsl('bf-cbc');

        $decrypted = $dec->decrypt($encrypted, $key);

        if (strcmp($datum, $decrypted) !== 0) {
            echo "Encryption with key '$key' of '$datum' failed.  '$decrypted' != '$datum'<br><br>\n\n";
            $failures++;
        }
    }
}

if ($failures) {
    echo "$failures tests failed.<br>\n";
} else {
    echo "ALL OKAY<br>\n";
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal