一个简单的图片加解密函数,使用client跑,不要使用浏览器跑
话不多说,直接上代码



<?php/** * Created by hello. * User: qq 845875470 * Date: 2016/4/2 * Time: 11:21 */$notice = <<<A为了稳定性,必须在客户端跑格式 :php path=D:/xxx/uuu type=en is_copy=1 salt=xxx参数使用空格分开path-- 路径 必须写type-- en加密, de为解密 必须写is_copy-- 1为复制,0为转移, 不写默认为转移salt-- 加密钥匙 加密用什么,解密就用什么不写默认为saltA;//如果不是客户端if(PHP_SAPI != "cli") {echo $notice;die;}//获取参数$arr = parse_parameter($argv);//如果路径没设置if(!isset($arr["path"]) || !isset($arr["type"])) {echo $notice;die;}//如果is_dir没设置if(!isset($arr["is_copy"])) {$arr["is_copy"] = "";}//如果salt没设置if(!isset($arr["salt"])) {$arr["salt"] = "";}//type为en就加密if($arr["type"] == "en") img_enconde($arr["path"], $arr["is_copy"], $arr["salt"]);//type为de就解密if($arr["type"] == "de") img_deconde($arr["path"], $arr["is_copy"], $arr["salt"]);function parse_parameter($argv){$arr = array();//获取参数for($len=count($argv)-1; $len--; ){list($key, $val) = explode("=", $argv[$len]);$arr[$key] = $val;}return $arr;}//图片加密函数//路径文件夹//是否为复制(默认不复制)//盐(默认为salt)function img_enconde($path, $is_copy = 0, $salt = "salt"){$time1 = microtime(1);$handle = opendir($path);if(!$salt) $salt = "salt";if($handle){echo "路径:" . $path . "
";//在指定文件夹下创建临时文件夹$temp_dir = $path . "\" . "temp";@mkdir($temp_dir, 0777, 1);while ($file = readdir($handle)){$time2 = microtime(1);//构造当前文件绝对地址$dir_path = $path . "\" . $file;//获取文件后缀$suffix = strrchr($file, ".");//图片后缀$fix = array(".jpg", ".gif", ".bmp", ".png", ".jpeg", ".JPG", ".GIF", ".BMP", ".PNG", "JPEG");if(is_file($dir_path) && in_array($suffix, $fix)){//打开当前文件$fh = fopen($dir_path, "r");//打开文件为流$stream = fread($fh, filesize($dir_path));//输出file_put_contents($temp_dir . "\" . uniqid("",1), $file . "!" . $salt . "@" . $stream);//关闭句柄fclose($fh);//是否为复制//1为复制,0为删除(默认)if(!$is_copy){echo "加密并删除 : " . $dir_path . "
";@unlink($dir_path);}else{echo "加密 : " . $dir_path . "
";}$time3 = microtime(1);echo "此图用时 ", ($time3 - $time2), " S
", "已经用时 ", ($time3 - $time1), " S
";}}echo "加密完成
";}else{echo "path invalid ";return false;}}//图片解密函数//路径文件夹//是否为复制(默认不复制)//盐(默认为salt)加密写什么,这里就写什么function img_deconde($path, $is_copy = 0, $salt = ""){$time1 = microtime(1);$handle = opendir($path);if($handle){echo "路径:" . $path . "
";if(!$salt) $salt = "salt";//在指定文件夹下创建临时文件夹$temp_dir = $path . "\" . "temp";@mkdir($temp_dir, 0777, 1);//核心正则$reg = "#^(.+?[jpgifbmne]{3,4})!(" . $salt . ")@#im";$res = array();$count = 0;while ($file = readdir($handle)){$time2 = microtime(1);//构造当前文件绝对地址$file_path = $path . "\" . $file;if(is_file($file_path)){//文件句柄$hf = fopen($file_path, "r");//返回流$stream = fread($hf, filesize($file_path));fclose($hf);//匹配加的密码if(preg_match_all($reg, $stream, $res)){$count++;//清空盐$stream = str_replace($res[0][0], "", $stream);//输出文件file_put_contents($temp_dir . "\" . $res[1][0], $stream);//是否为复制//1为复制,0为删除(默认)if(!$is_copy){echo "成功解密删除 : " . $temp_dir . "\" . $res[1][0] . "
";@unlink($file_path);}else{echo "解密 : " . $temp_dir . "\" . $res[1][0] . "
";}}$time3 = microtime(1);echo "此图用时 ", ($time3 - $time2), " S
", "已经用时 ", ($time3 - $time1), " S
";}}if(!$count){echo "没有有效的加密文件
";return false;}echo "解密完成
";}else{echo "path invalid ";return false;}}?>
以上就是这篇文章的全部内容,希望对大家的学习或者工作能有一定的帮助。