使用PHPZip类就可以解决的。以下是网上找到的例子。
$zipfiles=array("/root/pooy/test1.txt","/root/pooy/test2.txt");
$z=newPHPZip();
//$randomstr=random(8);
$zipfile=TEMP."/photocome_".$groupid.".zip";
$z->Zip($zipfiles,$zipfile);
<?php
#
#PHPZipv1.2bySext([email protected])2002-11-18
#(Changed:2003-03-01)
#
#Makesziparchive
#
#Basedon"Zipfilecreationclass",useszLib
#
#
classPHPZip
{
functionZip($dir,$zipfilename)
{
if(@function_exists('gzcompress'))
{
$curdir=getcwd();
if(is_array($dir))
{
$filelist=$dir;
}
else
{
$filelist=$this->GetFileList($dir);
}
if((!empty($dir))&&(!is_array($dir))&&(file_exists($dir)))chdir($dir);
elsechdir($curdir);
if(count($filelist)>0)
{
foreach($filelistas$filename)
{
if(is_file($filename))
{
$fd=fopen($filename,"r");
$content=fread($fd,filesize($filename));
fclose($fd);
if(is_array($dir))$filename=basename($filename);
$this->addFile($content,$filename);
}
}
$out=$this->file();
chdir($curdir);
$fp=fopen($zipfilename,"w");
fwrite($fp,$out,strlen($out));
fclose($fp);
}
return1;
}
elsereturn0;
}
functionGetFileList($dir)
{
if(file_exists($dir))
{
$args=func_get_args();
$pref=$args[1];
$dh=opendir($dir);
while($files=readdir($dh))
{
if(($files!=".")&&($files!=".."))
{
if(is_dir($dir.$files))
{
$curdir=getcwd();
chdir($dir.$files);
$file=array_merge($file,$this->GetFileList("","$pref$files/"));
chdir($curdir);
}
else$file[]=$pref.$files;
}
}
closedir($dh);
}
return$file;
}
var$datasec=array();
var$ctrl_dir=array();
var$eof_ctrl_dir="x50x4bx05x06x00x00x00x00";
var$old_offset=0;
/**
*(date
*inhightwobytes,).
*
*@
*
*@
*
*@accessprivate
*/
functionunix2DosTime($unixtime=0){
$timearray=($unixtime==0)?getdate():getdate($unixtime);
if($timearray['year']<1980){
$timearray['year']=1980;
$timearray['mon']=1;
$timearray['mday']=1;
$timearray['hours']=0;
$timearray['minutes']=0;
$timearray['seconds']=0;
}//endif
return(($timearray['year']-1980)<<25)|($timearray['mon']<<21)|($timearray['mday']<<16)|
($timearray['hours']<<11)|($timearray['minutes']<<5)|($timearray['seconds']>>1);
}//endofthe'unix2DosTime()'method
/**
*Adds"file"toarchive
*
*@paramstringfilecontents
*@(maycontainsthepath)
*@
*
*@accesspublic
*/
functionaddFile($data,$name,$time=0)
{
$name=str_replace('','/',$name);
$dtime=dechex($this->unix2DosTime($time));
$hexdtime='x'.$dtime[6].$dtime[7]
.'x'.$dtime[4].$dtime[5]
.'x'.$dtime[2].$dtime[3]
.'x'.$dtime[0].$dtime[1];
eval('$hexdtime="'.$hexdtime.'";');
$fr="x50x4bx03x04";
$fr.="x14x00";//verneededtoextract
$fr.="x00x00";//genpurposebitflag
$fr.="x08x00";//compressionmethod
$fr.=$hexdtime;//lastmodtimeanddate
//"localfileheader"segment
$unc_len=strlen($data);
$crc=crc32($data);
$zdata=gzcompress($data);
$c_len=strlen($zdata);
$zdata=substr(substr($zdata,0,strlen($zdata)-4),2);//fixcrcbug
$fr.=pack('V',$crc);//crc32
$fr.=pack('V',$c_len);//compressedfilesize
$fr.=pack('V',$unc_len);//uncompressedfilesize
$fr.=pack('v',strlen($name));//lengthoffilename
$fr.=pack('v',0);//extrafieldlength
$fr.=$name;
//"filedata"segment
$fr.=$zdata;
//"datadescriptor"segment(
//servedasfile)
$fr.=pack('V',$crc);//crc32
$fr.=pack('V',$c_len);//compressedfilesize
$fr.=pack('V',$unc_len);//uncompressedfilesize
//addthisentrytoarray
$this->datasec[]=$fr;
$new_offset=strlen(implode('',$this->datasec));
//
$cdrec="x50x4bx01x02";
$cdrec.="x00x00";//versionmadeby
$cdrec.="x14x00";//versionneededtoextract
$cdrec.="x00x00";//genpurposebitflag
$cdrec.="x08x00";//compressionmethod
$cdrec.=$hexdtime;//lastmodtime&date
$cdrec.=pack('V',$crc);//crc32
$cdrec.=pack('V',$c_len);//compressedfilesize
$cdrec.=pack('V',$unc_len);//uncompressedfilesize
$cdrec.=pack('v',strlen($name));//lengthoffilename
$cdrec.=pack('v',0);//extrafieldlength
$cdrec.=pack('v',0);//filecommentlength
$cdrec.=pack('v',0);//disknumberstart
$cdrec.=pack('v',0);//internalfileattributes
$cdrec.=pack('V',32);//externalfileattributes-'archive'bitset
$cdrec.=pack('V',$this->old_offset);//relativeoffsetoflocalheader
$this->old_offset=$new_offset;
$cdrec.=$name;
//optionalextrafield,filecommentgoeshere
//savetocentraldirectory
$this->ctrl_dir[]=$cdrec;
}//endofthe'addFile()'method
/**
*Dumpsoutfile
*
*@returnstringthezippedfile
*
*@accesspublic
*/
functionfile()
{
$data=implode('',$this->datasec);
$ctrldir=implode('',$this->ctrl_dir);
return
$data.
$ctrldir.
$this->eof_ctrl_dir.
pack('v',sizeof($this->ctrl_dir)).//total#ofentries"onthisdisk"
pack('v',sizeof($this->ctrl_dir)).//total#ofentriesoverall
pack('V',strlen($ctrldir)).//sizeofcentraldir
pack('V',strlen($data)).//offsettostartofcentraldir
"x00x00";//.zipfilecommentlength
}//endofthe'file()'method
}//endofthe'PHPZip'class
?>
2. PHP如何对用户密码进行加密
PHP如何对用户密码进行加密
第一种方法:可以使用如下方法对用户密码进行加密:MySql>SET user@”localhost” PASSWORD=PASSWORD(”Password”);
第二种方法:可以使用MYSQL的 PASSWORD函数进行用户密码的加密。例如:Insert into user(password, ……..) values (PASSWORD(”$password”,………));
可以在一个PHP文件里面include另外一个PHP文件两次吗
是的,可以在一个PHP文件里面include另外一个PHP文件两次,被include的那个php文件也会执行两次,所以如果在这个文件里面定义的有一个class, 就会报出the class already defined的错误。
mysql的最长数据库名,表名,字段名可以是多长
数据库名字最长为64
数据表名字最长为64
字段名字最长为64
mysql_pconnect()和mysql_connect()有什么区别
两者的区别主要有两个:
1. 在进行数据库连接时,函数会先找同一个host, 用户和密码的persistent(持续的)的'链接,如果能找到,则使用这个链接而不返回一个新的链接。
2. mysql_pconnect()创建的数据库连接在脚本执行完毕后仍然保留,可以被后来的代码继续使用,mysql_close()函数也不会关闭mysql_pconnect()创建的链接。
;3. php源码怎么加密
一、无需任何PHP扩展的加密
此类加密的代表有 威盾PHP加密专家、PHP在线加密平台、PHP神盾 等。
此类加密都是以eval函数为核心,辅以各式各样的字符串混淆和各种小技巧,来达到加密目的(更准确的说,应该算是混淆)。下面以一个简单的hello world为例来说明此类加密的大体过程。
<?php
echo "hello world";
首先 ,我们把这段代码变为通过eval执行的
<?php
eval('echo "hello world";');
然后 ,我们再进行一些转换,比如说base64编码
<?php
eval(base64_decode('ZWNobyAiaGVsbG8gd29ybGQiOw=='));
就这样子,我们的第一个加密过的php代码新鲜出炉了。。。
上面这个例子非常非常简单,基本上任何有一点php语言基础甚至别的语言基础的人都能轻松的看懂并解密。因此,我们需要一些方法让这个加密至少看上去不是那么简单。
二、同时采用多种编码函数
除了刚才提到的base64,php还有许多内置的编码函数,例如urlencode、gzcompress等。把这些函数混合使用可以提高解密的复杂度(不是难度),此外还可以使用strtr来制定自己的编码规则。 使用变量来代替函数名 使用特定字符来命名变量
这儿所说的特定字符是一些极其相似的字符,如I和1,0和O。试想一下满屏都是O和0组成的变量,并且每一个的名字长度都在10个字符以上。。。 判断文件自身是否被修改
这个功能看似容易,对文件做一下摘要再进行下对比即可知道是否被修改了,但是如何才能在文件内把摘要嵌入进去呢?我没有找到完美的方案,但一个变通的方案还是很容易的。。。
<?php
$code = substr(file_get_contents(__FILE__), 0, -32);
$hash = substr(file_get_contents(__FILE__), -32);
if (md5($code) !== $hash) {
exit('file edited');
}
当然,你可以把这个校验字符串放在别的位置来提高破解的难度。有了这个,别人想破解你的程序可就得多费一点功夫了。。。
既然知道了原理,那解密自然也就非常简单了,总体来说就三步:
把eval替换为输出,比如echo 根据编码规则把字符串还原 如果文件未解密完全,从第一步开始继续
当然,实际上的解密过程并没有这么简单,比如说如果加密的时候使用了gzcompress,那得到的数据将会包含一些二进制数据,而采用一般的文本编辑器打开时这些数据都会显示为乱码,并且在保存时丢失部分数据。解决方法很简单也很麻烦,那就是使用二进制(16进制)方式打开、修改和保存。
4. 如何给php代码加密
前台加密
后台接收到后
在和盐值拼接
在加密
存入数据库
我用md5举例
前台:md5(pwd);
//前台找一个js加密扩展就行
后台:
$salt
=
mt_rand(100000,999999);
//随机盐值
$pwd
=
md5($_GET('pwd').$salt);
//这样双重加密后入库了
登录验证时
前台也记得加密哦
5. php代码怎么加密最好,不能破解的那种
在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行处理了,最常见的莫过于就是邮箱和密码了,本文意在讨论对密码的处理:也就是对密码的加密处理。
MD5
相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这样的:
$password = md5($_POST["password"]);
上面这段代码是不是很熟悉?然而MD5的加密方式目前在PHP的江湖中貌似不太受欢迎了,因为它的加密算法实在是显得有点简单了,而且很多破解密码的站点都存放了很多经过MD5加密的密码字符串,所以这里我是非常不提倡还在单单使用MD5来加密用户的密码的。
SHA256 和 SHA512
其实跟前面的MD5同期的还有一个SHA1加密方式的,不过也是算法比较简单,所以这里就一笔带过吧。而这里即将要说到的SHA256 和 SHA512都是来自于SHA2家族的加密函数,看名字可能你就猜的出来了,这两个加密方式分别生成256和512比特长度的hash字串。
他们的使用方法如下:
<?php
$password = hash("sha256", $password);
PHP内置了hash()函数,你只需要将加密方式传给hash()函数就好了。你可以直接指明sha256, sha512, md5, sha1等加密方式。
盐值
在加密的过程,我们还有一个非常常见的小伙伴:盐值。对,我们在加密的时候其实会给加密的字符串添加一个额外的字符串,以达到提高一定安全的目的:
<?php
function generateHashWithSalt($password) {$intermediateSalt = md5(uniqid(rand(), true));$salt = substr($intermediateSalt, 0, 6);
return hash("sha256", $password . $salt);}
Bcrypt
如果让我来建议一种加密方式的话,Bcrypt可能是我给你推荐的最低要求了,因为我会强烈推荐你后面会说到的Hashing API,不过Bcrypt也不失为一种比较不错的加密方式了。
<?php
function generateHash($password) {
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {$salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);return crypt($password, $salt);
}
}
Bcrypt 其实就是Blowfish和crypt()函数的结合,我们这里通过CRYPT_BLOWFISH判断Blowfish是否可用,然后像上面一样生成一个盐值,不过这里需要注意的是,crypt()的盐值必须以$2a$或者$2y$开头,详细资料可以参考下面的链接:
http://www.php.net/security/crypt_blowfish.php更多资料可以看这里:
http://php.net/manual/en/function.crypt.phpPassword Hashing API
这里才是我们的重头戏,Password Hashing API是PHP 5.5之后才有的新特性,它主要是提供下面几个函数供我们使用:
password_hash() – 对密码加密.
password_verify() – 验证已经加密的密码,检验其hash字串是否一致.
password_needs_rehash() – 给密码重新加密.
password_get_info() – 返回加密算法的名称和一些相关信息.
虽然说crypt()函数在使用上已足够,但是password_hash()不仅可以使我们的代码更加简短,而且还在安全方面给了我们更好的保障,所以,现在PHP的官方都是推荐这种方式来加密用户的密码,很多流行的框架比如Laravel就是用的这种加密方式。
<?php
$hash = password_hash($passwod, PASSWORD_DEFAULT);对,就是这么简单,一行代码,All done。
PASSWORD_DEFAULT目前使用的就是Bcrypt,所以在上面我会说推荐这个,不过因为Password Hashing API做得更好了,我必须郑重地想你推荐Password Hashing API。这里需要注意的是,如果你代码使用的都是PASSWORD_DEFAULT加密方式,那么在数据库的表中,password字段就得设置超过60个字符长度,你也可以使用PASSWORD_BCRYPT,这个时候,加密后字串总是60个字符长度。
这里使用password_hash()你完全可以不提供盐值(salt)和 消耗值 (cost),你可以将后者理解为一种性能的消耗值,cost越大,加密算法越复杂,消耗的内存也就越大。当然,如果你需要指定对应的盐值和消耗值,你可以这样写:
<?php
$options = [
'salt' => custom_function_for_salt(), //write your own code to generate a suitable salt'cost' => 12 // the default cost is 10
];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);密码加密过后,我们需要对密码进行验证,以此来判断用户输入的密码是否正确:
<?php
if (password_verify($password, $hash)) {
// Pass
}
else {
// Invalid
}
很简单的吧,直接使用password_verify就可以对我们之前加密过的字符串(存在数据库中)进行验证了。
然而,如果有时候我们需要更改我们的加密方式,如某一天我们突然想更换一下盐值或者提高一下消耗值,我们这时候就要使用到password_needs_rehash()函数了:
<?php
if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {// cost change to 12
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);// don't forget to store the new hash!
}
只有这样,PHP的Password Hashing API才会知道我们重现更换了加密方式,这样的主要目的就是为了后面的密码验证。
简单地说一下password_get_info(),这个函数一般可以看到下面三个信息:
algo – 算法实例
algoName – 算法名字
options – 加密时候的可选参数
所以,现在就开始用PHP 5.5吧,别再纠结低版本了。
Happy Hacking
6. php文件被加密怎么破解
可以用黑刀Dezender来试试,我不担保可以解出来的哦,
从黑刀Dezender4.3版之后,将着力对混淆函数以及自定义函数的解密进行应对。
大家下载压缩包并解压后,会发现有一个“config.ini”的文件,这就是混淆函数库啦!
打开后,可自行编辑其中的内容,当然,也可以通过黑刀Dezender的升级程序直接下载官方最新的混淆函数库文件。这个混淆函数库就相当于是一个字典文件了,在保证格式不变的情况下,大家可以在【黑刀部落】下载《黑刀超级字典生成器》生成字典来挂入主程序进行解密,正确步骤为:先备份、改名自己的config.ini文件,生成的字典文件在第一行加入“[OBFUSCATE_NAME]”,将字典文件改名为config.ini,开始解密。
同时,黑刀部落网站的“项目中心”栏目也开设了用户提交自己已知程序被混淆的函数列表,这样的话,就能让Dezender变得越来越强了。再也不怕混淆函数了。呵呵。
什么是混淆函数?混淆函数,是从Zend Guard 4.0之后新增的一项功能,能把PHP文件中的所有函数名都进行混淆,混淆后变成以“_OBFUSCATE_”开头的一串“乱码”,这种加密方式感觉有点类似Md5,因为函数名已经不是原来的样子了,所以解密出来的PHP文件是不能正常执行的。黑刀Dezender在4.3版之后,新增加了挂入混淆函数库参与解密的功能,而混淆函数库,就像是一个包含了已知函数名的字典,利用这个字典,来与被混淆了的函数名(就是所谓的“乱码”)进行比对,如果比对结果相同,则解密出来的文件,基本上就可以恢复到加密前的样子了。如果混淆函数库中没有包含该PHP文件中使用的函数名,那么解密结果依然还是会存在“乱码”的。掌握了这个原理,我们就可以去想办法解决问题了。
方式有以下几种:
第一,使用黑刀超级字典生成器产生一个字典,字典的内容可以自己把握,修改字典文件名为“config.ini”,然后打开字典文件,在第一行插入“[OBFUSCATE_NAME]”标记(注意,方括号也是需要的,也就是引号内的内容都要加进去),将字典文件拷贝入黑刀Dezender主程序所在目录,同时注意备份原有的config.ini文件。这种办法费时费力,也要看运气,不过却是最实际的解决办法。
第二,常看别人源代码的朋友,可以把自己已经掌握了的混淆函数的真实函数名提交到我的网站上来。操作步骤:进入网站首页,进入项目中心的“DeZender混淆函数库更新表”,提交。我会定期查看大家提交上来的数据,加入到官方的混淆函数库中,不断的增强和完善官方混淆函数库,大家可以利用黑刀Dezender的自动升级功能对其进行升级!
7. 如何给PHP网页加密码访问
<?php
$pass='123456';//你设置的正确密码
$cook_pass=isset($_COOKIE['pw'])>$_COOKIE['pw']:'';
if($cook_pass!=$pass){
$form_pass=isset($_POST['pw'])>$_POST['pw']:'';
if($form_pass==$pass){//密码正确,保存COOKIE
set_cookie('pw',$form_pass);
}else{//密码错误或者没有密码,显示登录内容
echo'<formmethod=postaction=$PHP_SELF>
密码:<inputtype=passwdname=pw>
<inputtype=submitvalue='登录'>
</form>';
exit;
}
}
?>
这里开始是原始页面的代码