Réimpression : https://www.cnblogs.com/wicub/p/6395349.html
Cet article présente principalement le partage de deux fonctions de cryptage et de décryptage PHP plus classiques, l'une est la fonction de cryptage authcode de Discuz! (avec décomposition détaillée), et l'autre est la fonction encrypt(), qui sont toutes deux relativement classique, amis dans le besoin Vous pouvez vous référer à ce qui suit
Parfois, dans le projet, nous devons utiliser PHP pour crypter des informations spécifiques, c'est-à-dire qu'une chaîne cryptée est générée via l'algorithme de cryptage Cette chaîne cryptée peut être déchiffrée via l'algorithme de décryptage Decrypt pour faciliter le traitement des informations décryptées par le programme.
Les applications les plus courantes concernent la connexion des utilisateurs et certains scénarios d'échange de données API.
L'auteur a rassemblé quelques codes de fonctions classiques de cryptage et de décryptage PHP à partager avec vous. Le principe du cryptage et du décryptage consiste généralement à utiliser un certain algorithme de cryptage et de décryptage, à ajouter la clé à l'algorithme et enfin à obtenir les résultats de cryptage et de décryptage.
1. Fonction de cryptage du code d'authentification très puissante, Discuz! Classic code (avec explication détaillée) :
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; // 参与运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b), //解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); // 产生密匙簿 for($i = 0; $i 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码 return $keyc.str_replace('=', '', base64_encode($result)); } }
$string dans la fonction authcode($string, $opération, $key, $expiry) : Chaîne, texte brut ou texte chiffré ; $opération : DECODE signifie décryptage, autres signifie cryptage ; $key : clé de chiffrement ; $expiry : période de validité du texte chiffré.
Utilisation :
$str = 'abcdef'; $key = 'www.helloweba.com'; echo authcode($str,'ENCODE',$key,0); //加密 $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'; echo authcode($str,'DECODE',$key,0); //解密
2. Fonction de cryptage et de décryptage encrypt() :
function encrypt($string,$operation,$key=''){ $key=md5($key); $key_length=strlen($key); $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; $string_length=strlen($string); $rndkey=$box=array(); $result=''; for($i=0;$i<p class="cnblogs_code_toolbar" style="margin:5px 0px 0px;padding:0px;"><span class="cnblogs_code_copy" style="margin:0px;padding:0px 5px 0px 0px;line-height:1.5;"><img src="https://img.php.cn/upload/article/000/153/291/9e43d35958ca6748e93ca3656ec369b0-0.gif" alt="2 fonctions de chiffrement et de décryptage PHP plus classiques"></span></p><p style="max-width:90%"Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;text-align:left;background-color:rgb(245,245,245);">Fonction crypter($string,$ opération , $key) dans $string : la chaîne qui doit être cryptée et déchiffrée ; $opération : détermine s'il faut crypter ou déchiffrer, E signifie cryptage, D signifie décryptage ; <br>Utilisation : </p><p class="cnblogs_code" style="margin:5px 0px;padding:5px;background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);color:rgb(0,0,0);text-align:left;font-family:'Courier New';font-size:12px;"></p><pre style="margin-bottom:0px;padding-right:0px;padding-left:0px;white-space:pre-wrap;font-family:'Courier New';">$str = 'abc'; $key = 'www.helloweba.com'; $token = encrypt($str, 'E', $key); echo '加密:'.encrypt($str, 'E', $key); echo '解密:'.encrypt($str, 'D', $key);
相关推荐:
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!