PHP实现支持加盐的图片加密解密

2018-09-07 17:15

阅读:362

  一个简单的图片加解密函数,使用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 -- 加密钥匙 加密用什么,解密就用什么 不写默认为salt A; //如果不是客户端 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 . \r\n\r\n; //在指定文件夹下创建临时文件夹 $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 . \r\n; @unlink($dir_path); } else { echo 加密 : . $dir_path . \r\n; } $time3 = microtime(1); echo 此图用时 , ($time3 - $time2), S\r\n, 已经用时 , ($time3 - $time1), S\r\n\r\n; } } echo 加密完成\r\n; } 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 . \r\n\r\n; 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] . \r\n; @unlink($file_path); } else { echo 解密 : . $temp_dir . \\ . $res[1][0] . \r\n; } } $time3 = microtime(1); echo 此图用时 , ($time3 - $time2), S\r\n, 已经用时 , ($time3 - $time1), S\r\n\r\n; } } if(!$count) { echo 没有有效的加密文件\r\n; return false; } echo 解密完成\r\n; } else { echo path invalid ; return false; } } ?>

  以上就是这篇文章的全部内容,希望对大家的学习或者工作能有一定的帮助。


评论


亲,登录后才可以留言!