Maison  >  Article  >  développement back-end  >  Cryptage PHP

Cryptage PHP

WBOY
WBOYoriginal
2024-08-29 13:02:191097parcourir

Le cryptage PHP n'est rien d'autre que la réalisation du code de cryptage à l'aide de certains algorithmes qui sont parfois appelés algorithmes de hachage et avec lesquels ils fonctionnent généralement en prenant une chaîne ou une autre entrée, puis cela aidera à créer une empreinte digitale unique à partir de la chaîne. /autre. Le cryptage implique de changer le texte particulier/d'autres en un texte de code différent ou autre simplement pour sécuriser les données sans aucune exposition à la plupart des personnes, à l'exception de certaines personnes qui y ont accès. Découvrez les différents types de méthodes de cryptage PHP ci-dessous.

PUBLICITÉ Cours populaire dans cette catégorie DEVELOPPEUR PHP - Spécialisation | Série de 8 cours | 3 tests simulés

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

Types de cryptage PHP

Il existe de nombreux types de méthodes de cryptage actuellement utilisées, mais généralement par hachage, la deuxième est le cryptage par clé secrète et la troisième est la méthode de cryptage par enveloppe. Chaque méthode de cryptage aura plusieurs algorithmes ou chiffrements parmi lesquels choisir (pour chacun, il aura ses propres faiblesses et ses propres forces). Nous allons ici nous concentrer sur la mise en œuvre du hachage et du cryptage par clé secrète.

1. Hachage

L'algorithme de hachage du langage de programmation PHP prend généralement une valeur d'entrée et la transforme ensuite en un résumé de message. En un mot/plus, les valeurs de texte brut seront transformées en longueurs fixes de hachage, et elles ne pourront être validées qu'en contournant simplement une valeur d'origine vers l'algorithme de hachage unique. Cela rendra le hachage parfait juste pour stocker tous les mots de passe des utilisateurs.

Il convient simplement de noter que le hachage n’est pas du tout une solution à toute épreuve pour notre requête mais certains n’auront pas tous les algorithmes de hachage qui sont égaux. Nous avons pris en compte les algorithmes MD5 et SHA1 qui sont efficaces et rapides, puis avons rendu tous ces éléments idéaux pour la vérification et la somme de contrôle des fichiers. Leur vitesse rend la plupart d’entre eux impropres au hachage du mot de passe de l’utilisateur. Avec la puissance de calcul des GPU modernes, le mot de passe sera déchiffré simplement à l'aide de la force brute en quelques minutes et simplement en révélant le/les mot de passe d'origine en texte clair et intentionnellement l'algorithme/les algorithmes de hachage plus lents qui sont comme bcrypt. ou Argon2 sera utilisé.

Le hachage du mot de passe généré avec un algorithme masquera certainement les données réelles et originales, puis ralentira l'attaquant alors que les développeurs devraient essayer l'algorithme le plus puissant disponible. Le langage PHP aura une syntaxe de base qui est password_hash().

Voici un exemple d'utilisation de la technique de hachage 'bcrypt'.

Code :

<?php
$str1 = 'Password';
$options1 = [
'cost1' => 10,
'salt1' => '$P27r06o9!nasda57b2M22'
];
echo sprintf("The Result of crypt() function on %s is %s\n",
$str1, crypt($str1, $options1['salt1']));
echo "<br>";
echo sprintf("The Result of DEFAULT function on %s is %s\n",
$str1, password_hash($str1, PASSWORD_DEFAULT));
echo "<br>";
echo sprintf("The Result of BCRYPT function on %s is %s\n", $str1,
password_hash($str1, PASSWORD_BCRYPT, $options1));
echo "<br>";
?>

Sortie :

Cryptage PHP

2. Cryptage par clé secrète

Le cryptage par clé secrète du PHP utilise généralement une seule clé pour le cryptage et le décryptage des données. Il est également connu sous le nom de cryptage symétrique. Pour cela, si vous utilisez une ancienne version du langage de programmation PHP, installez le sodium du langage de programmation PHP via PECL.

Au début, vous avez besoin de la clé de cryptage qui est réellement générée simplement en utilisant le code de fonction random_bytes(). Mais généralement, vous ne devez le faire qu’une seule fois et le stockez simplement en tant que variable d’environnement. C’est la clé que nous devons garder secrète. Si la clé secrète est connue, le chiffrement sera également compromis.

$secret_key = random_bytes (SODIUM_CRYPTO_SECRETBOX_KEYBYTES);

Afin de chiffrer la valeur qui va passer à la fonction sodium_crypto_secretbox() avec notre clé/clé secrète et $nonce. Ensuite, la variable nonce est générée à l'aide de la fonction random_bytes() et c'est simplement parce que le nom occasionnel identique/similaire ne peut jamais être utilisé.

$nonce = random_bytes(SODIUM_CRYPTO_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox(‘This is secret key!!!’, $nonce, $secret_key);

Cela représentera le problème car nous avons besoin de ce nom occasionnel qui va décrypter la valeur plus tard/après. Mais le NONCE/NONCES n'a aucune clé à garder secrète afin que nous puissions facilement l'ajouter comme $ciphertext, puis la fonction base64_encode() est la valeur qui se produit avant de l'enregistrer dans la base de données réelle.

$encoded1 = base64_encode($nonce . $ciphertext);
Var_dump($encoded1);

La syntaxe ci-dessus sert uniquement à chiffrer la valeur. Afin de décoder/déchiffrer la valeur codée, utilisez la syntaxe ci-dessous.

$decoded1 = base64_decode($encoded1);

La longueur de la variable ou de la fonction nonce sera extraite à l'aide de la fonction mb_substr() juste avant de déchiffrer la valeur.

Voici un exemple d'implémentation de la fonction random_bytes() pour comprendre le cryptage par clé secrète. Ici, la longueur de la chaîne aléatoire sera convertie à l'aide de l'hexadécimal binaire afin de sécuriser les octets aléatoires dans une chaîne.

Code:

<?php
$length1 = random_bytes('3');
var_dump(bin2hex($length1));
?>

Output:

Cryptage PHP

3. Envelope Encryption

We all know that our data is vulnerable if our secret key is known/compromised. Just consider that a malicious user/attacker got access to the server point which is actually hosting our application/other. In this situation, attacker most of the times gets/discovers out the secret key which should be kept as secret. If it is discovered then our data may be in danger of exposing to the malicious user/attacker.

We can use Cloud KMS service which is actually provided by the Google Cloud Key Management Service. It provided a wide variety of so many useful features. It includes automatic key rotation and also the delayed key destruction capability.

Before sending plaintext to the CLOUD KMS, generate a unique encryption key each and every time when we actually write the data to the database. This key is called DEK (Data Encryption Key) which is actually used in encrypting the data. DEK which is sent to the Google Cloud KMS will be encrypted and then it will return the KEK (key encryption key). At last, KEK will be stored side by side in the actual database point which is next to the encrypted data and then the DEK will be destroyed.

Check out the data encryption and decryption as below:

Encryption process
  • It will generate unique DEK – Data Encryption Key
  • Using the SKE (Secret Key Encryption) the data will be encrypted
  • Now the DEK – Data Encryption Key will be sent to the Cloud KMS for encryption purpose which actually returns the KEY – Key Encryption Key.
  • Then the encrypted data will be stored and KEK side by side
  • Then the destruction of the DEK will be done
Decryption Process
  • Now at first, from the database encrypted and KEK (Key Encrypted Key) will be retrieved.
  • Then send KEK for the Cloud KMD for decryption which actually returns the DEK – Data Encryption Key
  • Now the DEK – Data Encryption Key will be used to decrypt the encrypted data.
  • Now DEK – Data Encryption Key will be destroyed.

Conclusion

I hope you learned what is the definition of PHP Encryption and along with the various types of PHP Encryption methods along with the examples by mentioning their brief description. An example is shown here for envelope encryption because it is cloud-based encryption.

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:
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
Article précédent:Annotations PHPArticle suivant:Annotations PHP