PHP實(shí)現(xiàn)支持加鹽的圖片加密解密
一個(gè)簡(jiǎn)單的圖片加解密函數(shù),使用client跑,不要使用瀏覽器跑
話不多說,直接上代碼
<?php /** * Created by hello. * User: qq 845875470 * Date: 2016/4/2 * Time: 11:21 */ $notice = <<<A 為了穩(wěn)定性,必須在客戶端跑 格式 :php path=D:/xxx/uuu type=en is_copy=1 salt=xxx 參數(shù)使用空格分開 path -- 路徑 必須寫 type -- en加密, de為解密 必須寫 is_copy -- 1為復(fù)制,0為轉(zhuǎn)移, 不寫默認(rèn)為轉(zhuǎn)移 salt -- 加密鑰匙 加密用什么,解密就用什么 不寫默認(rèn)為salt A; //如果不是客戶端 if(PHP_SAPI != 'cli') {echo $notice;die;} //獲取參數(shù) $arr = parse_parameter($argv); //如果路徑?jīng)]設(shè)置 if(!isset($arr['path']) || !isset($arr['type'])) {echo $notice;die;} //如果is_dir沒設(shè)置 if(!isset($arr['is_copy'])) {$arr['is_copy'] = '';} //如果salt沒設(shè)置 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(); //獲取參數(shù) for($len=count($argv)-1; $len--; ) { list($key, $val) = explode('=', $argv[$len]); $arr[$key] = $val; } return $arr; } //圖片加密函數(shù) //路徑文件夾 //是否為復(fù)制(默認(rèn)不復(fù)制) //鹽(默認(rèn)為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"; //在指定文件夾下創(chuàng)建臨時(shí)文件夾 $temp_dir = $path . '\\' . 'temp'; @mkdir($temp_dir, 0777, 1); while ($file = readdir($handle)) { $time2 = microtime(1); //構(gòu)造當(dāng)前文件絕對(duì)地址 $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)) { //打開當(dāng)前文件 $fh = fopen($dir_path, 'r'); //打開文件為流 $stream = fread($fh, filesize($dir_path)); //輸出 file_put_contents($temp_dir . '\\' . uniqid('',1), $file . '!' . $salt . '@' . $stream); //關(guān)閉句柄 fclose($fh); //是否為復(fù)制 //1為復(fù)制,0為刪除(默認(rèn)) if(!$is_copy) { echo "加密并刪除 : " . $dir_path . "\r\n"; @unlink($dir_path); } else { echo "加密 : " . $dir_path . "\r\n"; } $time3 = microtime(1); echo "此圖用時(shí) ", ($time3 - $time2), " S\r\n", "已經(jīng)用時(shí) ", ($time3 - $time1), " S\r\n\r\n"; } } echo "加密完成\r\n"; } else { echo "path invalid "; return false; } } //圖片解密函數(shù) //路徑文件夾 //是否為復(fù)制(默認(rèn)不復(fù)制) //鹽(默認(rèn)為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'; //在指定文件夾下創(chuàng)建臨時(shí)文件夾 $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); //構(gòu)造當(dāng)前文件絕對(duì)地址 $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); //是否為復(fù)制 //1為復(fù)制,0為刪除(默認(rèn)) 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 "此圖用時(shí) ", ($time3 - $time2), " S\r\n", "已經(jīng)用時(shí) ", ($time3 - $time1), " S\r\n\r\n"; } } if(!$count) { echo "沒有有效的加密文件\r\n"; return false; } echo "解密完成\r\n"; } else { echo "path invalid "; return false; } } ?>
以上就是這篇文章的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)或者工作能有一定的幫助。
相關(guān)文章
php中對(duì)xml讀取的相關(guān)函數(shù)的介紹一
php中對(duì)xml讀取的相關(guān)函數(shù)的介紹整理如下2008-06-06微信 開發(fā)生成帶參數(shù)的二維碼的實(shí)例
這篇文章主要介紹了微信 開發(fā)生成帶參數(shù)的二維碼的實(shí)例的相關(guān)資料,這里詳細(xì)介紹該如何實(shí)現(xiàn)二維碼,需要的朋友可以參考下2016-11-11php結(jié)合mysql與mysqli擴(kuò)展處理事務(wù)的方法
這篇文章主要介紹了php結(jié)合mysql與mysqli擴(kuò)展處理事務(wù)的方法,結(jié)合實(shí)例形式分析了php使用mysql與mysqli處理事務(wù)的相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下2016-06-06php中通過正則表達(dá)式下載內(nèi)容中的遠(yuǎn)程圖片的函數(shù)代碼
下午抽空寫了個(gè)用PHP正則表達(dá)式判斷內(nèi)容中的圖片,下載并保存非本域名下的圖片的程序2012-01-01PHP簡(jiǎn)單實(shí)現(xiàn)多維數(shù)組合并與排序功能示例
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)多維數(shù)組合并與排序功能,涉及php數(shù)組合并、排序等相關(guān)操作及array_merge、array_multisort等函數(shù)使用技巧,需要的朋友可以參考下2017-09-09PHP頁(yè)面跳轉(zhuǎn)操作實(shí)例分析(header方法)
這篇文章主要介紹了PHP頁(yè)面跳轉(zhuǎn)操作,結(jié)合實(shí)例形式對(duì)比分析了HTML跳轉(zhuǎn)與php使用header方法跳轉(zhuǎn)的相關(guān)操作技巧與注意事項(xiàng),并給出了一個(gè)跳轉(zhuǎn)的封裝函數(shù)供大家參考,需要的朋友可以參考下2016-09-09