120 votes

Comment crypter/décrypter des données en php ?

Je suis actuellement étudiant et j'étudie le PHP, j'essaie de faire un simple cryptage/décryptage de données en PHP. J'ai fait quelques recherches en ligne et certaines d'entre elles étaient assez confuses (du moins pour moi).

Voici ce que j'essaie de faire :

J'ai une table composée des champs suivants (UserID,Fname,Lname,Email,Password)

Ce que je veux, c'est que tous les champs soient cryptés, puis décryptés (est-il possible d'utiliser la méthode de l'utilisateur final ? sha256 pour le cryptage/décryptage, sinon tout algorithme de cryptage)

Une autre chose que je veux apprendre est comment créer une voie unique hash(sha256) combiné avec un bon "sel". (Fondamentalement, je veux juste avoir une implémentation simple du cryptage/décryptage, hash(sha256)+salt) Monsieur/Madame, vos réponses seraient d'une grande aide et très appréciées. Merci++.

3 votes

0 votes

9 votes

SHA est un hachage, pas un cryptage. Le point clé est qu'un hachage ne peut pas être inversé en données originales (pas facilement, en tout cas). Vous voulez probablement mcrypt ou si elle n'est pas disponible, je recommande phpseclib - Bien qu'il soit important de noter que toute implémentation purement PHP de quelque chose qui implique beaucoup de mathématiques de bas niveau sera lente... C'est pourquoi j'aime phpseclib, parce qu'il utilise mcrypt en premier s'il est disponible et ne se rabat sur les implémentations PHP qu'en dernier recours.

1voto

Echt Einfach TV Points 1091

Ça m'a pris un certain temps pour comprendre comment ne pas avoir un false lors de l'utilisation de openssl_decrypt() et faire fonctionner le cryptage et le décryptage.

    // cryptographic key of a binary string 16 bytes long (because AES-128 has a key size of 16 bytes)
    $encryption_key = '58adf8c78efef9570c447295008e2e6e'; // example
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = openssl_encrypt($plaintext, 'aes-256-cbc', $encryption_key, OPENSSL_RAW_DATA, $iv);
    $encrypted = $encrypted . ':' . base64_encode($iv);

    // decrypt to get again $plaintext
    $parts = explode(':', $encrypted);
    $decrypted = openssl_decrypt($parts[0], 'aes-256-cbc', $encryption_key, OPENSSL_RAW_DATA, base64_decode($parts[1])); 

Si vous souhaitez transmettre la chaîne cryptée via une URL, vous devez coder la chaîne en url :

    $encrypted = urlencode($encrypted);

Pour mieux comprendre ce qui se passe, lisez :

Pour générer des clés de 16 octets de long, vous pouvez utiliser :

    $bytes = openssl_random_pseudo_bytes(16);
    $hex = bin2hex($bytes);

Pour voir les messages d'erreur d'openssl vous pouvez utiliser : echo openssl_error_string();

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X