Position actuelle: Accueil> Derniers articles> Créez un processus de chiffrement personnalisé pour mélanger crypte () et openssl_ *

Créez un processus de chiffrement personnalisé pour mélanger crypte () et openssl_ *

M66 2025-05-28

Lors de la création d'applications PHP sécurisées, les développeurs font souvent face à des besoins de cryptage, y compris le chiffrement de stockage des données, la protection des mots de passe de l'utilisateur, le cryptage de transmission des données, etc. PHP prend nativement une variété de méthodes de chiffrement, parmi lesquelles la fonction crypt () convient au hachage de mot de passe, tandis que la fonction d' OpenSSL_ * est adaptée aux communications symétriques et asymétriques, à la génération de clés, à des communications d'encryptation et à d'autres tasks.

Dans cet article, nous utiliserons les fonctions Crypt () et OpenSSL_ * pour créer un processus de chiffrement personnalisé pour prendre en compte à la fois la sécurité du hachage de mot de passe et la flexibilité du chiffrement des données.

1. Idées de processus de chiffrement personnalisé

Nous espérons atteindre les objectifs suivants:

  1. Hachage de mot de passe utilisateur - Utilisez Crypt () pour effectuer un hachage irréversible;

  2. Encryption de données - Données sensibles aux utilisateurs de crypte à l'aide de l'algorithme de cryptage symétrique OpenSSL;

  3. Protection des clés - générer et gérer les clés pour assurer la sécurité du processus de chiffrement;

  4. Décription des données - Le texte chiffré peut être restauré en texte clair, à condition qu'il existe la bonne clé.

2. Hash de mot de passe: utilisez crypte ()

Crypt () est une fonction pour le hachage des mots de passe. Nous vous recommandons d'utiliser l'algorithme BCrypt , un algorithme éprouvé pour le hachage du mot de passe.

 function hash_password($password) {
    $salt = '$2y$10$' . substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 22);
    return crypt($password, $salt);
}

Vérifiez le mot de passe:

 function verify_password($password, $hash) {
    return crypt($password, $hash) === $hash;
}

3. Encryption symétrique: utilisez openssl_encrypt ()

Afin de crypter des données sensibles aux utilisateurs, telles que le courrier électronique et le numéro d'identification, nous utilisons la méthode de cryptage symétrique d'OpenSSL, telles que AES-256-CBC .

Fonction de chiffrement:

 function encrypt_data($plaintext, $key) {
    $iv_length = openssl_cipher_iv_length('AES-256-CBC');
    $iv = openssl_random_pseudo_bytes($iv_length);
    $ciphertext = openssl_encrypt($plaintext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $ciphertext);
}

Fonction de décryptage:

 function decrypt_data($encrypted, $key) {
    $data = base64_decode($encrypted);
    $iv_length = openssl_cipher_iv_length('AES-256-CBC');
    $iv = substr($data, 0, $iv_length);
    $ciphertext = substr($data, $iv_length);
    return openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
}

4. Générer la clé de chiffrement

Vous pouvez utiliser openssl_random_pseudo_bytes () pour générer une clé de sécurité:

 function generate_secure_key($length = 32) {
    return base64_encode(openssl_random_pseudo_bytes($length));
}

Dans les projets réels, vous devez utiliser un moyen sécurisé de stocker vos clés, comme l'utilisation de variables environnementales ou de services de gestion des clés, plutôt que de codés dur dans votre code.

5. Exemples d'utilisation pratiques

 $password = 'myStrongPassword123!';
$hashed = hash_password($password);

if (verify_password('myStrongPassword123!', $hashed)) {
    echo "La vérification du mot de passe s'est écoulée\n";
}

$key = base64_decode('pL2u0xJNzYX2+x5sK8Xt5c34BLTPWhMHn0h0snA4MlQ='); // Exemple de clé
$secret = 'E-mail utilisateur: user@example.com';
$encrypted = encrypt_data($secret, $key);
$decrypted = decrypt_data($encrypted, $key);

echo "Données cryptées: $encrypted\n";
echo "Données décryptées: $decrypted\n";

6. Conseils de sécurité

  1. Utilisez HTTPS pour la transmission des données et les données cryptées ne doivent pas être envoyées via des canaux de texte brut;

  2. La gestion clé est au cœur de la sécurité du système, et il est recommandé de coopérer avec des modules de sécurité tels que Hashicorp Vault;

  3. Faites pivoter régulièrement les clés et les algorithmes;

  4. Ne jamais code dur, la touche de cryptage dans un référentiel GIT ou un code frontal;

  5. Audit régulièrement le processus de chiffrement et les vulnérabilités connues du patch en temps opportun.

7. Extension du scénario d'application

Cette combinaison de crypte () et d'OpenSSL_ * convient aux scénarios où l'authentification des utilisateurs et le chiffrement des données sensibles sont nécessaires, tels que:

  • Stockage chiffré du numéro de carte bancaire et de la carte d'identité;

  • Protéger l'historique du chat utilisateur ou les informations privées;

  • Créer un mécanisme de sécurité multicouche pour séparer les mots de passe et les données utilisateur;

  • Décrypter et analyser automatiquement les données cryptées régulièrement en arrière-plan (extrêmement prudent sur les problèmes de fuite des clés).

8. Conclusion

En combinant la fonction de hachage irréversible de Crypt () et la capacité de cryptage symétrique d'OpenSSL, nous pouvons établir un système de chiffrement relativement complet et sécurisé qui convient à la gestion des mots de passe de l'utilisateur et répond aux besoins du stockage de chiffrement des données. Avec l'évolution des besoins commerciaux et des menaces de sécurité, cette solution a également une bonne évolutivité.

Pour les plans de mise en œuvre plus pertinents et les meilleures pratiques, vous pouvez visiter la documentation officielle ou les plateformes de discussion communautaire, telles que: