Implémentation d'un algorithme de chiffrement symétrique en php

墨辰丷
Libérer: 2023-03-28 09:06:01
original
2005 Les gens l'ont consulté

Récemment, j'ai soudainement voulu sauvegarder certaines choses confidentielles dans la base de données, puis j'ai réfléchi à la façon d'empêcher les autres de comprendre ce qui est stocké même s'ils entrent dans la base de données, donc le seul moyen est de le crypter mais nous quand même ; Nous devons le voir nous-mêmes. Ensuite, nous ne pouvons trouver que des algorithmes de cryptage symétriques, puis le déchiffrer lorsque nous voulons le voir. Ce qui suit présente l'implémentation d'un algorithme de chiffrement symétrique simple en PHP.

Préface

J'ai trouvé un bon algorithme de chiffrement symétrique pour PHP sur Internet dans l'environnement de syntaxe PHP, il y a urlencode et urldecode , base64_encode et base64_decode sont livrés avec leurs propres algorithmes symétriques, mais ces algorithmes intégrés ne peuvent pas être appelés algorithmes de chiffrement, ils peuvent uniquement être considérés comme des méthodes de codage. Mais nous pouvons les utiliser pour effectuer certains traitements afin de mettre en œuvre des algorithmes simples de chiffrement et de déchiffrement.

Cette fois les algorithmes de chiffrement et de déchiffrement sont adaptés en base64. Habituellement, nous utilisons la chaîne générée par base64_encode($str) Sans aucun traitement, base64_decode() peut être reconvertie en notre chaîne précédente ; mais si nous insérons quelques caractères dans la chaîne après base64_encode(), elle ne peut pas être rétablie. , et même si on l'inverse, ce n'est pas notre propre chaîne.

L'exemple de code est le suivant :

 <?php
 $content = "大家好,我是中国人,你是谁";

 /**
 * 简单对称加密算法之加密
 * @param String $string 需要加密的字串
 * @param String $skey 加密EKY
 * @return String
 */
 function encode($string = &#39;&#39;, $skey = &#39;wenzi&#39;) {
 $strArr = str_split(base64_encode($string));
 $strCount = count($strArr);
 foreach (str_split($skey) as $key => $value)
  $key < $strCount && $strArr[$key].=$value;
 return str_replace(array(&#39;=&#39;, &#39;+&#39;, &#39;/&#39;), array(&#39;O0O0O&#39;, &#39;o000o&#39;, &#39;oo00o&#39;), join(&#39;&#39;, $strArr));
 }

 /**
 * 简单对称加密算法之解密
 * @param String $string 需要解密的字串
 * @param String $skey 解密KEY
 * @return String
 */
 function decode($string = &#39;&#39;, $skey = &#39;wenzi&#39;) {
 $strArr = str_split(str_replace(array(&#39;O0O0O&#39;, &#39;o000o&#39;, &#39;oo00o&#39;), array(&#39;=&#39;, &#39;+&#39;, &#39;/&#39;), $string), 2);
 $strCount = count($strArr);
 foreach (str_split($skey) as $key => $value)
  $key <= $strCount && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
 return base64_decode(join(&#39;&#39;, $strArr));
 }

 echo &#39;<pre class="brush:php;toolbar:false">&#39;;
 echo "string : " . $content . " <br />";
 echo "encode : " . ($enstring = encode($content)) . &#39;<br />&#39;;
 echo "decode : " . decode($enstring);

 exit();
Copier après la connexion

Nous pouvons voir dans l'algorithme ci-dessus Pour : Nous insérons la clé que nous avons définie à l'avance dans les caractères générés par base64_encode(), puis remplaçons les caractères spéciaux à l'intérieur. Même si d'autres voient une telle chaîne, ils ne sauront pas de quoi il s'agit. Bien sûr, nous pouvons apporter de légères améliorations ici, comme insérer la clé dans la chaîne à l'envers, base64 la clé puis l'insérer, etc. Après avoir inséré la clé, base64 à nouveau.

Bien sûr, le décryptage est le sens inverse du cryptage. Après avoir réfléchi un moment, j'ai compris le principe du décryptage : avant d'insérer des caractères dans la chaîne, il faut maintenant les retirer lors du décryptage. .Regroupez d'abord les chaînes chiffrées par 2 éléments dans chaque tableau, puis déterminez si le deuxième caractère est dans la clé. Si tel est le cas, le premier caractère est le caractère de la base64 d'origine.

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.


Recommandations associées :

PHP utilise un algorithme récursif Parcours infini de tableaux

Tri couramment utilisé en PHPAlgorithmeExplication détaillée des exemples

Tri PHP couramment utiliséAlgorithmesExplication détaillée d'exemples de structures de données

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!

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