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

墨辰丷
墨辰丷original
2018-06-07 16:11:112594parcourir

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;
}
}
?>

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));
  }
}
?>

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!

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