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
445 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!

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