怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2023-06-13 09:14:50 时间
分享2种PHP的源码加密方式,此加密方法支持任意PHP版。
注意,加密后的PHP代码无需第三方工具解密,像往常一样,直接运行即可。
复制代码代码如下:
注意,加密后的PHP代码无需第三方工具解密,像往常一样,直接运行即可。
<?php
functionencode_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"."\neval(gzinflate(base64_decode(".""".$encode.""".")));\n\n?>";
returnfile_put_contents($filename,$encode);
}
returnfalse;
}
//调用函数
$filename="dam.php";
encode_file_contents($filename);
echo"OK,加密完成!"
?>
加密方式2:
<?php
functionRandAbc($length=""){//返回随机字符串
$str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
returnstr_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)ordie("写文件错误");
?>
其实,PHP加密源码方式有很多,譬如,免费的微盾PHP加密,还有www.phpjm.net搞的在线加密,只是phpjm更复杂点而已。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
另外,分享一个PHP类,它能对文本的内容进行二进制加密与解密,代码如下:
<?php
classtext_auth
{
var$n_iter;
functiontext_auth()
{
$this->setIter(32);
}
functionsetIter($n_iter)
{
$this->n_iter=$n_iter;
}
functiongetIter()
{
return$this->n_iter;
}
functionencrypt($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;
}
functiondecrypt($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);
returnpack("H".$len,$str);
}
function_str2long($start,&$data,&$data_long)
{
$n=strlen($data);
$tmp =unpack("N*",$data);
$j =$start;
foreach($tmpas$value)
$data_long[$j++]=$value;
return$j;
}
function_long2str($l)
{
returnpack("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;
}
}
?>
使用方法参考如下:
//加密过程
viewsourceprint?
$text_file=S_ROOT."./456.php";
$str=@file_get_contents($text_file);
require_onceS_ROOT."./text_auth.php";
$text_auth=newtext_auth(64);
$str=$text_auth->encrypt($str,"qianyunlai.com");
$filename=S_ROOT."./789.php";//加密后的文本为二进制,普通的文本编辑器无法正常查看
file_put_contents($filename,$str);
//解密过程
viewsourceprint
?01$text_file=S_ROOT."./789.php";
$str=@file_get_contents($text_file);
require_onceS_ROOT."./text_auth.php";
$text_auth=newtext_auth(64);
$str=$text_auth->decrypt($str,"qianyunlai.com");
$filename=S_ROOT."./456.php";
file_put_contents($filename,$str);
相关文章
- PHP网站编程之PDO使用记录
- php redis缓存雪崩,redis雪崩是什么「建议收藏」
- PHP获取QQ昵称和头像API
- PHP 密码散列算法函数password_hash详解
- 安装安装Linux下的64位PHP(linux64位php)
- 基于PHP的MySQL访问方式(php访问mysql)
- PHP在Linux下的应用突破之路(php使用linux)
- PHP与MySQL的加密安全之旅(phpmysql加密)
- MySQL在PHP中的应用(phpmysql过程)
- MySQL实现PHP数组存储的效果(mysql存储数组php)
- 使用PHP编辑器轻松编写Linux平台代码(php编辑器linux)
- 使用PHP和MySQL研究论文(php mysql 论文)
- Linux查看PHP版本的方法简介(linux查看php版本)
- 最令PHP初学者头痛的十四个问题
- 用php编写的日历
- Apache,PHP在Windows9x/NT下的安装与配置(一)
- PHP字符转义相关函数小结(php下的转义字符串)
- linux下安装apache与php;Apache+PHP+MySQL配置攻略
- 加强php的安全之一
- PHP一些常用的正则表达式字符的一些转换
- PHP中10个不常见却非常有用的函数
- php下删除一篇文章生成的多个静态页面
- php方法调用模式与函数调用模式简例
- php笔记之:文章中图片处理的使用
- php内核解析:PHP中的哈希表
- php实现的替换敏感字符串类实例