Maison > développement back-end > tutoriel php > Comment puis-je chiffrer et décrypter des chaînes en PHP en toute sécurité ?

Comment puis-je chiffrer et décrypter des chaînes en PHP en toute sécurité ?

Patricia Arquette
Libérer: 2024-12-26 20:33:16
original
541 Les gens l'ont consulté

How Can I Encrypt and Decrypt Strings in PHP Securely?

Comment crypter et décrypter une chaîne PHP ?

Le cryptage d'une chaîne PHP implique de convertir la chaîne d'origine dans un format crypté à l'aide d'une clé ou du sel. Le déchiffrement de la chaîne nécessite la même clé ou le même sel pour récupérer la chaîne d'origine.

Processus de cryptage

  1. Crypter : Crypter la chaîne d'origine en utilisant un algorithme sécurisé comme AES-256 en CTR (Counter Mode) ou GCM (Galois/Counter Mode).
  2. Authentifier : Calculez un MAC (Message Authentication Code) pour la chaîne cryptée à l'aide de HMAC-SHA-256. Combinez la chaîne cryptée et le MAC pour générer le résultat crypté final.

Processus de décryptage

  1. Authentifier : Recalculer le MAC pour le résultat crypté et comparez-le au MAC inclus. Abandonnez s'ils diffèrent.
  2. Déchiffrer : Décryptez la chaîne chiffrée à l'aide de la clé correcte.

Considérations clés

  • Utilisez des algorithmes de cryptage authentifiés (par exemple, AES-GCM, ChaCha20-Poly1305) pour à la fois le cryptage et l'authentification.
  • Utilisez des bibliothèques sécurisées comme libsodium ou defuse/php-encryption pour des fonctionnalités de cryptage et de décryptage robustes.
  • Évitez de déployer votre propre cryptographie en raison des risques de sécurité potentiels.
  • Générer des IV (vecteurs d'initialisation) à l'aide d'un CSPRNG (Cryptographically Secure Pseudo-Random Number Generator) comme random_bytes ou sodium_randombytes.
  • Protégez les clés de chiffrement avec prudence. Pensez à utiliser une clé de chiffrement de clé ou un système de gestion de clés sécurisé.

Exemple avec Libsodium :

<?php
use Sodium\Crypto;

function encrypt(string $message, string $key): string
{
    $nonce = random_bytes(Crypto::SECRETBOX_NONCEBYTES);
    $encrypted = Crypto::secretbox($message, $nonce, $key);
    return base64_encode($nonce . $encrypted);
}

function decrypt(string $encrypted, string $key): string
{
    $decoded = base64_decode($encrypted);
    $nonce = substr($decoded, 0, Crypto::SECRETBOX_NONCEBYTES);
    $ciphertext = substr($decoded, Crypto::SECRETBOX_NONCEBYTES);
    $decrypted = Crypto::secretbox_open($ciphertext, $nonce, $key);
    
    return $decrypted;
}

$message = 'Hello, world!';
$key = random_bytes(Crypto::SECRETBOX_KEYBYTES);
$encrypted = encrypt($message, $key);
$decrypted = decrypt($encrypted, $key);

var_dump($encrypted);
var_dump($decrypted);
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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal