Maison > développement back-end > tutoriel php > Comment chiffrer les gros messages avec des clés asymétriques et un phpseclib

Comment chiffrer les gros messages avec des clés asymétriques et un phpseclib

Christopher Nolan
Libérer: 2025-02-18 09:11:12
original
434 Les gens l'ont consulté

Ce tutoriel montre comment crypter de gros messages à l'aide de clés asymétriques et de la bibliothèque PhPSeclib.


How to Encrypt Large Messages with Asymmetric Keys and phpseclib Concepts clés

Le cryptage asymétrique, comme RSA, résout les défis de distribution clés en utilisant une clé publique pour le cryptage et une clé privée pour le déchiffrement. Cela permet un partage de clé public sûr, car seul le titulaire de la clé privée peut décrypter.

La limitation de la

RSA est sa capacité de texte en clair restreint; Une clé de 2048 bits gère généralement un maximum de 256 octets.

Le cryptage hybride (combinant des méthodes symétriques et asymétriques) surmonte cela. Une clé symétrique crypte le message, alors cette clé symétrique est chiffrée avec la clé publique du destinataire et annexée. Le destinataire décrypte la clé symétrique à l'aide de sa clé privée, puis l'utilise pour décrypter le message.

PHP Secure Communications Library (PHPSECLIB) est une bibliothèque d'open source gratuite offrant des implémentations pur-php de divers algorithmes de chiffrement, y compris RSA et des algorithmes symétriques (DES, AES). Il prend en charge le chiffrement hybride et les fonctions de manière fiable même sans extensions de cryptage plus rapides.

Introduction

crypter des données sensibles avant la transmission est cruciale. Le chiffrement convertit le texte en clair (données normales) en texte chiffré (données secrètes) à l'aide d'une clé et d'un algorithme. Le décryptage inverse ce processus.

L'algorithme de chiffrement applique des opérations mathématiques aux valeurs numériques de la clé et du texte en clair pour produire un texte chiffré. Des clés plus grandes améliorent la sécurité.

La distribution des clés est un défi essentiel: comment transmettre des clés en toute sécurité aux destinataires autorisés? La solution dépend de l'algorithme et du type de clé.

algorithmes de chiffrement et clés

Deux types d'algorithmes de chiffrement principaux existent:

  1. Algorithmes symétriques: Utilisez la même clé pour le cryptage et le décryptage. L'échange de clés est une vulnérabilité.
  2. Algorithmes asymétriques: Utilisez des clés publiques et privées distinctes. Les données chiffrées avec la clé publique ne sont décryptables qu'avec la clé privée correspondante. Cela résout le problème de distribution des clés car la clé publique peut être partagée sans compromettre la sécurité.

Choisir des algorithmes de chiffrement

Les algorithmes forts reposent sur des mathématiques avancées. La résistance est déterminée par le temps requis pour le déchiffrement sans la clé. L'Institut national des normes et de la technologie (NIST) fournit des recommandations. Les algorithmes asymétriques courants comprennent la RSA et le DSA, avec RSA souvent préféré commercialement en raison de son évolutivité. Rijndael (AES) est un algorithme symétrique largement utilisé.

limitations de clés RSA

Bien que les algorithmes asymétriques résolvent la distribution des clés, RSA a une capacité de chiffrement en texte en clair limité. Une clé de 2048 bits ne peut crypter que jusqu'à 256 octets.

La solution: chiffrement hybride

La solution optimale combine le cryptage symétrique et asymétrique:

  1. Encryption symétrique: crypter le grand message avec une clé symétrique générée de manière aléatoire.
  2. Encryption asymétrique: crypter la clé symétrique à l'aide de la clé publique du destinataire.
  3. Transmission: Envoyez le message chiffré et la clé symétrique cryptée au destinataire.

Le destinataire inverse le processus: décrypte la clé symétrique avec leur clé privée, puis décrypte le message.

Implémentation avec PhPSeclib

Cet exemple utilise la bibliothèque PHP Secure Communications (PHPSeclib). Installez-le via le compositeur. La documentation est à https://www.php.cn/link/4662efebaa2ef1b42bb1097a941393ef .

Génération des touches

$rsa = new Crypt_RSA();
$keys = $rsa->createKey(2048);

file_put_contents('key.pri', $keys['privatekey']);
file_put_contents('key.pub', $keys['publickey']);
Copier après la connexion

Fonction de chiffrement

function encrypt_message($plaintext, $asym_key, $key_length = 150) {
    $rsa = new Crypt_RSA();
    $rij = new Crypt_Rijndael();

    $sym_key = crypt_random_string($key_length);
    $rij->setKey($sym_key);
    $ciphertext = $rij->encrypt($plaintext);
    $ciphertext = base64_encode($ciphertext);

    $rsa->loadKey($asym_key);
    $sym_key = $rsa->encrypt($sym_key);
    $sym_key = base64_encode($sym_key);
    $len = strlen($sym_key);
    $len = dechex($len);
    $len = str_pad($len, 3, '0', STR_PAD_LEFT);

    $message = $len . $sym_key . $ciphertext;
    return $message;
}
Copier après la connexion

Fonction de décryptage

function decrypt_message($message, $asym_key) {
    $rsa = new Crypt_RSA();
    $rij = new Crypt_Rijndael();

    $len = substr($message, 0, 3);
    $len = hexdec($len);
    $sym_key = substr($message, 0, $len);
    $message = substr($message, 3);
    $ciphertext = substr($message, $len);
    $ciphertext = base64_decode($ciphertext);

    $rsa->loadKey($asym_key);
    $sym_key = base64_decode($sym_key);
    $sym_key = $rsa->decrypt($sym_key);

    $rij->setKey($sym_key);
    $plaintext = $rij->decrypt($ciphertext);
    return $plaintext;
}
Copier après la connexion

Conclusion

La communication de données sécurisée est essentielle. Le cryptage hybride, tirant parti des algorithmes symétriques et asymétriques, offre une solution robuste. PHPSECLIB fournit un outil fiable et polyvalent pour implémenter cette approche dans PHP. Le code source est disponible sur github (lien fourni dans le texte d'origine).

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