首页 > 代码库 > php实现图片加密解密,支持加盐

php实现图片加密解密,支持加盐

一个简单的图片加解密函数

使用client跑,不要使用浏览器跑

qq845875470 ,技术交流

技术分享

技术分享

技术分享

  1 <?php  2 /**  3  * Created by hello.  4  * User: qq 845875470  5  * Date: 2016/4/2  6  * Time: 11:21  7  */  8   9 $notice = <<<A 10     为了稳定性,必须在客户端跑 11     格式 :php path=D:/xxx/uuu type=en is_copy=1 salt=xxx 12     参数使用空格分开 13     path        -- 路径 必须写 14     type        -- en加密, de为解密 必须写 15     is_copy        -- 1为复制,0为转移,                 不写默认为转移 16     salt        -- 加密钥匙 加密用什么,解密就用什么    不写默认为salt 17 A; 18  19 //如果不是客户端 20 if(PHP_SAPI != ‘cli‘) {echo $notice;die;} 21  22 //获取参数 23 $arr = parse_parameter($argv); 24  25 //如果路径没设置 26 if(!isset($arr[‘path‘]) || !isset($arr[‘type‘]))     {echo $notice;die;} 27 //如果is_dir没设置 28 if(!isset($arr[‘is_copy‘]))                         {$arr[‘is_copy‘] = ‘‘;} 29 //如果salt没设置 30 if(!isset($arr[‘salt‘]))                             {$arr[‘salt‘] = ‘‘;} 31  32 //type为en就加密 33 if($arr[‘type‘] == "en") img_enconde($arr[‘path‘], $arr[‘is_copy‘], $arr[‘salt‘]); 34 //type为de就解密 35 if($arr[‘type‘] == "de") img_deconde($arr[‘path‘], $arr[‘is_copy‘], $arr[‘salt‘]); 36  37  38 function parse_parameter($argv) 39 { 40     $arr = array(); 41     //获取参数 42     for($len=count($argv)-1; $len--; ) 43     { 44         list($key, $val) = explode(‘=‘, $argv[$len]); 45         $arr[$key] = $val; 46     } 47     return $arr; 48 } 49  50  51 //图片加密函数 52 //路径文件夹 53 //是否为复制(默认不复制) 54 //盐(默认为salt) 55 function img_enconde($path, $is_copy = 0, $salt = ‘salt‘) 56 { 57     $time1 = microtime(1); 58     $handle = opendir($path); 59     if(!$salt) $salt = ‘salt‘; 60     if($handle) 61     { 62         echo "路径:" . $path . "\r\n\r\n"; 63         //在指定文件夹下创建临时文件夹 64         $temp_dir = $path . ‘\\‘ . ‘temp‘; 65         @mkdir($temp_dir, 0777, 1); 66  67         while ($file = readdir($handle)) 68         { 69             $time2 = microtime(1); 70             //构造当前文件绝对地址 71             $dir_path = $path . ‘\\‘ . $file; 72             //获取文件后缀 73             $suffix = strrchr($file, ‘.‘); 74             //图片后缀 75             $fix = array(‘.jpg‘, ‘.gif‘, ‘.bmp‘, ‘.png‘, ‘.jpeg‘, ‘.JPG‘, ‘.GIF‘, ‘.BMP‘, ‘.PNG‘, ‘JPEG‘); 76  77             if(is_file($dir_path) && in_array($suffix, $fix)) 78             { 79                 //打开当前文件 80                 $fh = fopen($dir_path, ‘r‘); 81  82                 //打开文件为流 83                 $stream = fread($fh, filesize($dir_path)); 84                 //输出 85                 file_put_contents($temp_dir . ‘\\‘ . uniqid(‘‘,1), $file . ‘!‘ . $salt . ‘@‘ . $stream); 86                 //关闭句柄 87                 fclose($fh); 88  89                 //是否为复制 90                 //1为复制,0为删除(默认) 91                 if(!$is_copy) 92                 { 93                     echo "加密并删除 : " . $dir_path . "\r\n"; 94                     @unlink($dir_path); 95                 } 96                 else 97                 { 98                     echo "加密 : " . $dir_path . "\r\n"; 99                 }100                 $time3 = microtime(1);101                 echo "此图用时 ", ($time3 - $time2), " S\r\n", "已经用时 ", ($time3 - $time1), " S\r\n\r\n";102             }103         }104 105         echo "加密完成\r\n";106     }107     else108     {109         echo "path invalid ";110         return false;111     }112 }113 114 //图片解密函数115 //路径文件夹116 //是否为复制(默认不复制)117 //盐(默认为salt)加密写什么,这里就写什么118 function img_deconde($path, $is_copy = 0, $salt = ‘‘)119 {120     $time1 = microtime(1);121     $handle = opendir($path);122     if($handle)123     {124         echo "路径:" . $path . "\r\n\r\n";125         if(!$salt) $salt = ‘salt‘;126 127         //在指定文件夹下创建临时文件夹128         $temp_dir = $path . ‘\\‘ . ‘temp‘;129         @mkdir($temp_dir, 0777, 1);130 131         //核心正则132         $reg = "#^(.+?[jpgifbmne]{3,4})!(" . $salt . ")@#im";133         $res = array();134 135         $count = 0;136         while ($file = readdir($handle))137         {138             $time2 = microtime(1);139             //构造当前文件绝对地址140             $file_path = $path . ‘\\‘ . $file;141 142             if(is_file($file_path))143             {144                 //文件句柄145                 $hf = fopen($file_path, ‘r‘);146                 //返回流147                 $stream = fread($hf, filesize($file_path));148                 fclose($hf);149 150                 //匹配加的密码151                 if(preg_match_all($reg, $stream, $res))152                 {153                     $count++;154                     //清空盐155                     $stream = str_replace($res[0][0], ‘‘, $stream);156                     //输出文件157                     file_put_contents($temp_dir . ‘\\‘ . $res[1][0], $stream);158 159                     //是否为复制160                     //1为复制,0为删除(默认)161                     if(!$is_copy)162                     {163                         echo "成功解密删除 : " . $temp_dir . ‘\\‘ . $res[1][0] . "\r\n";164                         @unlink($file_path);165                     }166                     else167                     {168                         echo "解密 : " . $temp_dir . ‘\\‘ . $res[1][0] . "\r\n";169                     }170                 }171                 $time3 = microtime(1);172                 echo "此图用时 ", ($time3 - $time2), " S\r\n", "已经用时 ", ($time3 - $time1), " S\r\n\r\n";173             }174         }175         if(!$count)176         {177             echo "没有有效的加密文件\r\n";178             return false;179         }180         echo "解密完成\r\n";181     }182     else183     {184         echo "path invalid ";185         return false;186     }187 }188 189 ?>

 

php实现图片加密解密,支持加盐