Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiel für die gemeinsame Nutzung von PHP-Informationen zur umkehrbaren Verschlüsselung

Beispiel für die gemeinsame Nutzung von PHP-Informationen zur umkehrbaren Verschlüsselung

*文
*文Original
2017-12-27 14:24:201058Durchsuche

In diesem Artikel wird hauptsächlich die Methode zur Realisierung der reversiblen Verschlüsselung in PHP vorgestellt und auf dem Verschlüsselungsprinzip von discuz zurückgegriffen, um die Funktion der reversiblen Verschlüsselung durch Schlüssel zu realisieren. Ich hoffe, es hilft allen.

Die Details lauten wie folgt:

Die hier eingeführte Verschlüsselungsklasse kann umgekehrt werden, und es ist schwierig, sie ohne Schlüssel zu knacken.

Der PHP-Code lautet wie folgt:


<?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-Verschlüsselung und -Entschlüsselung:


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

Verwandte Empfehlungen:

Der Kampf zwischen PHP-Verschlüsselung und -Entschlüsselung

Interner PHP-Verschlüsselungs- und Entschlüsselungsalgorithmus

PHP-Dongle-Aufrufmethode

Das obige ist der detaillierte Inhalt vonBeispiel für die gemeinsame Nutzung von PHP-Informationen zur umkehrbaren Verschlüsselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn