Maison >développement back-end >tutoriel php >PHP implémente un cryptage symétrique simple
Parfois, nous rencontrons des données qui doivent être cryptées dans le projet, mais nous devons les décrypter nous-mêmes. Ensuite, nous ne pouvons trouver que des algorithmes de cryptage symétriques, puis les décrypter lorsque nous voulons les voir. Cet article présente l'implémentation d'un algorithme de chiffrement symétrique simple en PHP. J'espère qu'il sera utile à tout le monde.
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 = '', $skey = 'wenzi') { $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('=', '+', '/'), array('O0O0O', 'o000o', 'oo00o'), join('', $strArr)); } /** * 简单对称加密算法之解密 * @param String $string 需要解密的字串 * @param String $skey 解密KEY * @return String */ function decode($string = '', $skey = 'wenzi') { $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $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('', $strArr)); } echo '<pre class="brush:php;toolbar:false">'; echo "string : " . $content . " <br />"; echo "encode : " . ($enstring = encode($content)) . '<br />'; echo "decode : " . decode($enstring); exit();
Dans l'algorithme ci-dessus on peut voir : on insère les caractères générés par base64_encode()
Nous définissons la clé à l'avance, puis y remplaçons les caractères spéciaux. 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., insérer la clé puis la 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.
Recommandations associées :
Comment PHP peut mieux chiffrer les mots de passe
Comment obtenir des données flash détaillées en PHP
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!