PHP给源代码加密的几种方法汇总(推荐)


Posted in PHP onFebruary 06, 2018

虽说分享是传统的美德,但我们有时候辛辛苦苦写一些程序只是为了卖点小钱,挣点辛苦费,也防止有些没有道德的人倒卖,所以我们不得不对我们的程序进行加密,以下我们来介绍一下如何通过PHP的自定义函数来加密我们的PHP源代码。

第一个方法

<?php 
 function encode_file_contents($filename) { 
  $type=strtolower(substr(strrchr($filename,'.'),1)); 
  if ('php' == $type && is_file($filename) && is_writable($filename)) { // 如果是PHP文件 并且可写 则进行压缩编码 
   $contents = file_get_contents($filename); // 判断文件是否已经被编码处理 
   $contents = php_strip_whitespace($filename); 
 
   // 去除PHP头部和尾部标识 
   $headerPos = strpos($contents,'<?php'); 
   $footerPos = strrpos($contents,'?>'); 
   $contents = substr($contents, $headerPos + 5, $footerPos - $headerPos); 
   $encode = base64_encode(gzdeflate($contents)); // 开始编码 
   $encode = '<?php'."\n eval(gzinflate(base64_decode("."'".$encode."'".")));\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 = 'index.php'; //要加密的文件 
 $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 = '$'.$q6.'=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");$'.$q1.'=$'.$q6.'{3}.$'.$q6.'{6}.$'.$q6.'{33}.$'.$q6.'{30};$'.$q3.'=$'.$q6.'{33}.$'.$q6.'{10}.$'.$q6.'{24}.$'.$q6.'{10}.$'.$q6.'{24};$'.$q4.'=$'.$q3.'{0}.$'.$q6.'{18}.$'.$q6.'{3}.$'.$q3.'{0}.$'.$q3.'{1}.$'.$q6.'{24};$'.$q5.'=$'.$q6.'{7}.$'.$q6.'{13};$'.$q1.'.=$'.$q6.'{22}.$'.$q6.'{36}.$'.$q6.'{29}.$'.$q6.'{26}.$'.$q6.'{30}.$'.$q6.'{32}.$'.$q6.'{35}.$'.$q6.'{26}.$'.$q6.'{30};eval($'.$q1.'("'.base64_encode('$'.$q2.'="'.$c.'";eval(\'?>\'.$'.$q1.'($'.$q3.'($'.$q4.'($'.$q2.',$'.$q5.'*2),$'.$q4.'($'.$q2.',$'.$q5.',$'.$q5.'),$'.$q4.'($'.$q2.',0,$'.$q5.'))));').'"));'; 
 
 $s = '<?php '."\n".$s."\n".' ?>'; 
 //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('H' . $len, $str); 
  } 
 
  function _str2long($start, &$data, &$data_long) 
  { 
   $n = strlen($data); 
 
   $tmp = unpack('N*', $data); 
   $j  = $start; 
 
   foreach ($tmp as $value) 
    $data_long[$j++] = $value; 
 
   return $j; 
  } 
 
  function _long2str($l) 
  { 
   return pack('N', $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和数据库结合的一个简单的web实例 代码分析 (php初学者)
Jul 28 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
Mar 25 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
php实现带读写分离功能的MySQL类完整实例
Jul 28 PHP
php文件上传 你真的掌握了吗
Nov 28 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 #PHP
PHP定义字符串的四种方式详解
Feb 06 #PHP
PHP异步进程助手async-helper
Feb 05 #PHP
详解PHP中的外观模式facade pattern
Feb 05 #PHP
浅析PHP开发规范
Feb 05 #PHP
实例讲解PHP页面静态化
Feb 05 #PHP
PHP使用ActiveMQ实例
Feb 05 #PHP
You might like
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
Python开发网站目录扫描器的实现
2019/02/21 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
python识别验证码的思路及解决方案
2020/09/13 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
建龙钢铁面试总结
2014/04/15 面试题
幼儿园英语教学反思
2014/01/30 职场文书
校园安全演讲稿
2014/05/09 职场文书
经销商年会策划方案
2014/05/29 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
毕业生应聘求职信
2014/07/10 职场文书
关于运动会的广播稿
2014/09/22 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
2014年领班工作总结
2014/11/25 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
Java实现聊天机器人完善版
2021/07/04 Java/Android
nginx请求限制配置方法
2021/07/09 Servers
MySQL创建定时任务
2022/01/22 MySQL