Maison > développement back-end > tutoriel php > Méthodes et principes de chiffrement réversible PHP

Méthodes et principes de chiffrement réversible PHP

墨辰丷
Libérer: 2023-03-30 14:12:02
original
2599 Les gens l'ont consulté

Cet article présente principalement les méthodes et principes du cryptage réversible PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Le code PHP est le suivant :

<?php
class encryptCalss
{
var $key=12;
function encode($txt){
for($i=0;$i<strlen($txt);$i++){
$txt[$i]=chr(ord($txt[$i])+$this->key);
}
return $txt=urlencode(base64_encode(urlencode($txt)));
}
function decode($txt){
$txt=urldecode(base64_decode($txt));
for($i=0;$i<strlen($txt);$i++){
$txt[$i]=chr(ord($txt[$i])-$this->key);
}
return $txt;
}
}
?>
Copier après la connexion

discuz cryptage et déchiffrement :

<?php
/**
 * 
 * @param string $string 原文或者密文
 * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE
 * @param string $key 密钥
 * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
 * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
 * @example 
 *  $a = authcode(&#39;abc&#39;, &#39;ENCODE&#39;, &#39;key&#39;);
 *  $b = authcode($a, &#39;DECODE&#39;, &#39;key&#39;); // $b(abc)
 * 
 *  $a = authcode(&#39;abc&#39;, &#39;ENCODE&#39;, &#39;key&#39;, 3600);
 *  $b = authcode(&#39;abc&#39;, &#39;DECODE&#39;, &#39;key&#39;); // 在一个小时内,$b(abc),否则 $b 为空
 */
function authcode($string,$operation=&#39;DECODE&#39;,$key=&#39;&#39;,$expiry=0){
  $ckey_length=4;
  $key=md5($key ? $key:"kalvin.cn");
  $keya=md5(substr($key,0,16));
  $keyb=md5(substr($key,16,16));
  $keyc=$ckey_length ? ($operation==&#39;DECODE&#39; ? substr($string,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):&#39;&#39;;
  $cryptkey=$keya.md5($keya.$keyc);
  $key_length=strlen($cryptkey);
  $string=$operation==&#39;DECODE&#39; ? base64_decode(substr($string,$ckey_length)):sprintf(&#39;%010d&#39;,$expiry ? $expiry+time():0).substr(md5($string.$keyb),0,16).$string;
  $string_length=strlen($string);
  $result=&#39;&#39;;
  $box=range(0,255);
  $rndkey=array();
  for($i=0;$i<=255;$i++){
    $rndkey[$i]=ord($cryptkey[$i%$key_length]);
  }
  for($j=$i=0;$i<256;$i++){
    $j=($j+$box[$i]+$rndkey[$i])%256;
    $tmp=$box[$i];
    $box[$i]=$box[$j];
    $box[$j]=$tmp;
  }
  for($a=$j=$i=0;$i<$string_length;$i++){
    $a=($a+1)%256;
    $j=($j+$box[$a])%256;
    $tmp=$box[$a];
    $box[$a]=$box[$j];
    $box[$j]=$tmp;
    $result.=chr(ord($string[$i]) ^ ($box[($box[$a]+$box[$j])%256]));
  }
  if($operation==&#39;DECODE&#39;){
    if((substr($result,0,10)==0||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$keyb),0,16)){
      returnsubstr($result,26);
    }else{
      return&#39;&#39;;
    }
  }else{
    return $keyc.str_replace(&#39;=&#39;,&#39;&#39;,base64_encode($result));
  }
}
?>
Copier après la connexion

Résumé : C'est tout pour cet article. Nous espérons que l'ensemble du contenu de l'article sera utile à l'étude de chacun.

Recommandations associées :

Explication détaillée de plusieurs façons de réaliser la statique de page en PHP

PHP implémente la même méthode de cryptage et de déchiffrement DES que c#

Tutoriel pratique PHP sur la méthode de filtrage, de vérification, d'échappement et de mot de passe

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:
php
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