一個簡單的圖片加解密函數,使用client跑,不要使用瀏覽器跑
話不多說,直接上代碼
<?php$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 . "/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; }}?>
相關推薦:
php 加密擴展庫Mcrypt安裝與示例
PHP 加密解密內部算法
PHP 加密與解密的斗爭
以上就是PHP實現加鹽的圖片加密的詳細內容,更多請關注 其它相關文章!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答