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

一个简单的图片加解密函数,使用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;

}

}

?>

以上是 PHP实现支持加盐的图片加密解密 的全部内容, 来源链接: utcz.com/z/325338.html

回到顶部