>  기사  >  백엔드 개발  >  소스 코드 암호화를 위한 PHP 방법 요약

소스 코드 암호화를 위한 PHP 방법 요약

小云云
小云云원래의
2018-02-06 15:48:062820검색

공유는 전통적인 미덕이지만, 우리는 때때로 단지 약간의 돈을 받고 팔고, 열심히 일하고, 일부 부도덕한 사람들이 재판매하는 것을 방지하기 위해 일부 프로그램을 작성하기 위해 열심히 노력하므로 프로그램을 암호화해야 합니다. 아래는 PHP의 사용자 정의 기능을 통해 PHP 소스 코드를 암호화하는 방법을 소개하겠습니다. 이 기사는 주로 PHP에서 소스 코드를 암호화하는 여러 가지 방법에 대한 요약(권장)을 공유합니다. 이는 좋은 참조 가치가 있으며 모든 사람에게 도움이 되기를 바랍니다. 편집자를 따라가서 모두에게 도움이 되기를 바랍니다.

첫 번째 방법

<?php 
 function encode_file_contents($filename) { 
  $type=strtolower(substr(strrchr($filename,&#39;.&#39;),1)); 
  if (&#39;php&#39; == $type && is_file($filename) && is_writable($filename)) { // 如果是PHP文件 并且可写 则进行压缩编码 
   $contents = file_get_contents($filename); // 判断文件是否已经被编码处理 
   $contents = php_strip_whitespace($filename); 
 
   // 去除PHP头部和尾部标识 
   $headerPos = strpos($contents,&#39;<?php&#39;); 
   $footerPos = strrpos($contents,&#39;?>'); 
   $contents = substr($contents, $headerPos + 5, $footerPos - $headerPos); 
   $encode = base64_encode(gzdeflate($contents)); // 开始编码 
   $encode = '<?php&#39;."\n eval(gzinflate(base64_decode("."&#39;".$encode."&#39;".")));\n\n?>"; 
 
   return file_put_contents($filename, $encode); 
  } 
  return false; 
 } 
 
 //调用函数 
 $filename = 'dam.php'; 
 encode_file_contents($filename); 
 echo "OK,加密完成!" 
 ?>

두 번째 방법

<?php 
 
 function RandAbc($length = "") { // 返回随机字符串 
  $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 
  return str_shuffle($str); 
 } 
 
 $filename = &#39;index.php&#39;; //要加密的文件 
 $T_k1 = RandAbc(); //随机密匙1 
 $T_k2 = RandAbc(); //随机密匙2 
 $vstr = file_get_contents($filename); 
 $v1 = base64_encode($vstr); 
 $c = strtr($v1, $T_k1, $T_k2); //根据密匙替换对应字符。 
 $c = $T_k1.$T_k2.$c; 
 $q1 = "O00O0O"; 
 $q2 = "O0O000"; 
 $q3 = "O0OO00"; 
 $q4 = "OO0O00"; 
 $q5 = "OO0000"; 
 $q6 = "O00OO0"; 
 $s = &#39;$&#39;.$q6.&#39;=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$&#39;.$q1.&#39;=$&#39;.$q6.&#39;{3}.$&#39;.$q6.&#39;{6}.$&#39;.$q6.&#39;{33}.$&#39;.$q6.&#39;{30};$&#39;.$q3.&#39;=$&#39;.$q6.&#39;{33}.$&#39;.$q6.&#39;{10}.$&#39;.$q6.&#39;{24}.$&#39;.$q6.&#39;{10}.$&#39;.$q6.&#39;{24};$&#39;.$q4.&#39;=$&#39;.$q3.&#39;{0}.$&#39;.$q6.&#39;{18}.$&#39;.$q6.&#39;{3}.$&#39;.$q3.&#39;{0}.$&#39;.$q3.&#39;{1}.$&#39;.$q6.&#39;{24};$&#39;.$q5.&#39;=$&#39;.$q6.&#39;{7}.$&#39;.$q6.&#39;{13};$&#39;.$q1.&#39;.=$&#39;.$q6.&#39;{22}.$&#39;.$q6.&#39;{36}.$&#39;.$q6.&#39;{29}.$&#39;.$q6.&#39;{26}.$&#39;.$q6.&#39;{30}.$&#39;.$q6.&#39;{32}.$&#39;.$q6.&#39;{35}.$&#39;.$q6.&#39;{26}.$&#39;.$q6.&#39;{30};eval($&#39;.$q1.&#39;("&#39;.base64_encode(&#39;$&#39;.$q2.&#39;="&#39;.$c.&#39;";eval(\&#39;?>\'.$'.$q1.'($'.$q3.'($'.$q4.'($'.$q2.',$'.$q5.'*2),$'.$q4.'($'.$q2.',$'.$q5.',$'.$q5.'),$'.$q4.'($'.$q2.',0,$'.$q5.'))));').'"));'; 
 
 $s = '<?php &#39;."\n".$s."\n".&#39; ?>'; 
 //echo $s; 
 // 生成 加密后的PHP文件 
 $fpp1 = fopen('temp_'.$filename, 'w'); 
 fwrite($fpp1, $s) or die('写文件错误'); 
 
 ?>

세 번째 방법

<?php 
 
 class text_auth 
 { 
  var $n_iter; 
 
  function text_auth() 
  { 
   $this->setIter(32); 
  } 
 
  function setIter($n_iter) 
  { 
   $this->n_iter = $n_iter; 
  } 
 
  function getIter() 
  { 
   return $this->n_iter; 
  } 
 
  function encrypt($data, $key) 
  { 
   $n = $this->_resize($data, 4); 
 
   $data_long[0] = $n; 
   $n_data_long = $this->_str2long(1, $data, $data_long); 
 
   $n = count($data_long); 
   if (($n & 1) == 1) { 
    $data_long[$n] = chr(0); 
    $n_data_long++; 
   } 
 
   $this->_resize($key, 16, true); 
   if ( '' == $key ) 
    $key = '0000000000000000'; 
 
   $n_key_long = $this->_str2long(0, $key, $key_long); 
 
   $enc_data = ''; 
   $w   = array(0, 0); 
   $j   = 0; 
   $k   = array(0, 0, 0, 0); 
   for ($i = 0; $i < $n_data_long; ++$i) { 
    if ($j + 4 <= $n_key_long) { 
     $k[0] = $key_long[$j]; 
     $k[1] = $key_long[$j + 1]; 
     $k[2] = $key_long[$j + 2]; 
     $k[3] = $key_long[$j + 3]; 
    } else { 
     $k[0] = $key_long[$j % $n_key_long]; 
     $k[1] = $key_long[($j + 1) % $n_key_long]; 
     $k[2] = $key_long[($j + 2) % $n_key_long]; 
     $k[3] = $key_long[($j + 3) % $n_key_long]; 
    } 
    $j = ($j + 4) % $n_key_long; 
 
    $this->_encipherLong($data_long[$i], $data_long[++$i], $w, $k); 
 
    $enc_data .= $this->_long2str($w[0]); 
    $enc_data .= $this->_long2str($w[1]); 
   } 
 
   return $enc_data; 
  } 
 
  function decrypt($enc_data, $key) 
  { 
   $n_enc_data_long = $this->_str2long(0, $enc_data, $enc_data_long); 
 
   $this->_resize($key, 16, true); 
   if ( '' == $key ) 
    $key = '0000000000000000'; 
 
   $n_key_long = $this->_str2long(0, $key, $key_long); 
 
   $data = ''; 
   $w  = array(0, 0); 
   $j  = 0; 
   $len = 0; 
   $k  = array(0, 0, 0, 0); 
   $pos = 0; 
 
   for ($i = 0; $i < $n_enc_data_long; $i += 2) { 
    if ($j + 4 <= $n_key_long) { 
     $k[0] = $key_long[$j]; 
     $k[1] = $key_long[$j + 1]; 
     $k[2] = $key_long[$j + 2]; 
     $k[3] = $key_long[$j + 3]; 
    } else { 
     $k[0] = $key_long[$j % $n_key_long]; 
     $k[1] = $key_long[($j + 1) % $n_key_long]; 
     $k[2] = $key_long[($j + 2) % $n_key_long]; 
     $k[3] = $key_long[($j + 3) % $n_key_long]; 
    } 
    $j = ($j + 4) % $n_key_long; 
 
    $this->_decipherLong($enc_data_long[$i], $enc_data_long[$i + 1], $w, $k); 
 
    if (0 == $i) { 
     $len = $w[0]; 
     if (4 <= $len) { 
      $data .= $this->_long2str($w[1]); 
     } else { 
      $data .= substr($this->_long2str($w[1]), 0, $len % 4); 
     } 
    } else { 
     $pos = ($i - 1) * 4; 
     if ($pos + 4 <= $len) { 
      $data .= $this->_long2str($w[0]); 
 
      if ($pos + 8 <= $len) { 
       $data .= $this->_long2str($w[1]); 
      } elseif ($pos + 4 < $len) { 
       $data .= substr($this->_long2str($w[1]), 0, $len % 4); 
      } 
     } else { 
      $data .= substr($this->_long2str($w[0]), 0, $len % 4); 
     } 
    } 
   } 
   return $data; 
  } 
 
  function _encipherLong($y, $z, &$w, &$k) 
  { 
   $sum = (integer) 0; 
   $delta = 0x9E3779B9; 
   $n  = (integer) $this->n_iter; 
 
   while ($n-- > 0) { 
    $y  = $this->_add($y, 
         $this->_add($z << 4 ^ $this->_rshift($z, 5), $z) ^ 
          $this->_add($sum, $k[$sum & 3])); 
    $sum = $this->_add($sum, $delta); 
    $z  = $this->_add($z, 
         $this->_add($y << 4 ^ $this->_rshift($y, 5), $y) ^ 
          $this->_add($sum, $k[$this->_rshift($sum, 11) & 3])); 
   } 
 
   $w[0] = $y; 
   $w[1] = $z; 
  } 
 
  function _decipherLong($y, $z, &$w, &$k) 
  { 
   $sum = 0xC6EF3720; 
   $delta = 0x9E3779B9; 
   $n  = (integer) $this->n_iter; 
 
   while ($n-- > 0) { 
    $z  = $this->_add($z, 
         -($this->_add($y << 4 ^ $this->_rshift($y, 5), $y) ^ 
           $this->_add($sum, $k[$this->_rshift($sum, 11) & 3]))); 
    $sum = $this->_add($sum, -$delta); 
    $y  = $this->_add($y, 
         -($this->_add($z << 4 ^ $this->_rshift($z, 5), $z) ^ 
           $this->_add($sum, $k[$sum & 3]))); 
   } 
 
   $w[0] = $y; 
   $w[1] = $z; 
  } 
 
  function _resize(&$data, $size, $nonull = false) 
  { 
   $n  = strlen($data); 
   $nmod = $n % $size; 
   if ( 0 == $nmod ) 
    $nmod = $size; 
 
   if ($nmod > 0) { 
    if ($nonull) { 
     for ($i = $n; $i < $n - $nmod + $size; ++$i) { 
      $data[$i] = $data[$i % $n]; 
     } 
    } else { 
     for ($i = $n; $i < $n - $nmod + $size; ++$i) { 
      $data[$i] = chr(0); 
     } 
    } 
   } 
   return $n; 
  } 
 
  function _hex2bin($str) 
  { 
   $len = strlen($str); 
   return pack(&#39;H&#39; . $len, $str); 
  } 
 
  function _str2long($start, &$data, &$data_long) 
  { 
   $n = strlen($data); 
 
   $tmp = unpack(&#39;N*&#39;, $data); 
   $j  = $start; 
 
   foreach ($tmp as $value) 
    $data_long[$j++] = $value; 
 
   return $j; 
  } 
 
  function _long2str($l) 
  { 
   return pack(&#39;N&#39;, $l); 
  } 
 
  function _rshift($integer, $n) 
  { 
   if (0xffffffff < $integer || -0xffffffff > $integer) { 
    $integer = fmod($integer, 0xffffffff + 1); 
   } 
 
   if (0x7fffffff < $integer) { 
    $integer -= 0xffffffff + 1.0; 
   } elseif (-0x80000000 > $integer) { 
    $integer += 0xffffffff + 1.0; 
   } 
 
   if (0 > $integer) { 
    $integer &= 0x7fffffff; 
    $integer >>= $n; 
    $integer |= 1 << (31 - $n); 
   } else { 
    $integer >>= $n; 
   } 
 
   return $integer; 
  } 
 
  function _add($i1, $i2) 
  { 
   $result = 0.0; 
 
   foreach (func_get_args() as $value) { 
    if (0.0 > $value) { 
     $value -= 1.0 + 0xffffffff; 
    } 
 
    $result += $value; 
   } 
 
   if (0xffffffff < $result || -0xffffffff > $result) { 
    $result = fmod($result, 0xffffffff + 1); 
   } 
 
   if (0x7fffffff < $result) { 
    $result -= 0xffffffff + 1.0; 
   } elseif (-0x80000000 > $result) { 
    $result += 0xffffffff + 1.0; 
   } 
   return $result; 
  } 
 } 
 ?> 
使用方法参考如下:
// 加密过程
view sourceprint?
 $text_file = S_ROOT . './456.php'; 
 $str = @file_get_contents($text_file); 
 
 require_once S_ROOT . "./text_auth.php"; 
 $text_auth = new text_auth(64); 
 
 $str = $text_auth->encrypt($str, "qianyunlai.com"); 
 
 $filename = S_ROOT . './789.php'; // 加密后的文本为二进制,普通的文本编辑器无法正常查看 
 file_put_contents($filename, $str); 
// 解密过程
view sourceprint
?01 $text_file = S_ROOT . './789.php'; 
 $str = @file_get_contents($text_file); 
 
 require_once S_ROOT . "./text_auth.php"; 
 $text_auth = new text_auth(64); 
 
 $str = $text_auth->decrypt($str, "qianyunlai.com"); 
 
 $filename = S_ROOT . './456.php'; 
 file_put_contents($filename, $str);

관련 권장 사항:

소스 코드 암호화를 구현하는 PHP 방법

PHP 소스 코드를 암호화하는 방법? PHP 소스 코드 암호화 및 암호 해독 솔루션_PHP tutorial

php 소스 코드 암호화 구현 방법, php 소스 코드 암호화_PHP tutorial

위 내용은 소스 코드 암호화를 위한 PHP 방법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.