php配置文件加盐解密,PHP实现支持加盐的图片加密解密

一个简单的图片加解密函数,使用client跑,不要使用浏览器跑

话不多说,直接上代码

95a97b18ca0795caab8bed475a2898f4.png

108a5c44819256e9fe8ffbb8f12a19e2.png

0fdb85583735f096ccb5860e29d60f13.png

/**

* Created by hello.

* User: qq 845875470

* Date: 2016/4/2

* Time: 11:21

*/

$notice = <<

为了稳定性,必须在客户端跑

格式 :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;

}

}

?>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle导入dmp文件报12504,ORA-12504:TNS :监听程序在 CONNECT_DATA 中未获得SERVICE_NAME...

使用本地的SQLPlus连接服务器上的Oracle数据库&#xff0c;这是由于本地有安装了Oracle数据库服务&#xff0c;所以才会系统先提示&#xff1a;ORA-12504:TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME再次输入用户名密码系统又提示&#xff1a;ORA-12560: TNS: 协议适配…

linux+有趣的指令,6个有趣的Linux命令(乐趣终端) - 第二部分

在我们过去的以下文章中&#xff0c;我们展示了一些关于Linux的有趣命令的有用文章&#xff0c;这表明Linux并不像看起来那么复杂&#xff0c;如果我们知道如何使用它&#xff0c;就会很有趣。 Linux命令行可以非常容易地完成任何复杂的任务&#xff0c;可以有趣和快乐。有趣的…

dvwa安装包linux,dvwa安裝、配置、使用教程(Linux)

一、搭建LAMP環境二、安裝DVWA2.1 下載dvwa2.2 解壓安裝將下載的應用解壓到apache默認的主目錄/var/www/html&#xff1a;unzip DVWA-master.zip -d /usr/www/html2.3 啟用功能dvwa上的漏洞&#xff0c;需要些刻意的配置才能被利用。訪問&#xff1a;http://172.0.0.2/dvwa如下…

八数码c语言编程深度搜索,广度优先搜索解 八数码, 求意见, 求bug/

已结贴√问题点数&#xff1a;100 回复次数&#xff1a;31广度优先搜索解 , 求意见&#xff0c; 求bug/我得去买票了&#xff0c;....#include #include #include #define NUM 5typedef struct bgMatrix{int v, w;char matrix[NUM][NUM];int pre;}Matrix;typedef struct bgQueu…

linux定时任务每两天执行,Linux定时任务 crontab每秒执行 实现2种方法

linux crontab 命令&#xff0c;最小的执行时间是一分钟&#xff0c; 如果要在小于一分钟执行。就要换个方法来实现&#xff0c;下面分别以两种方法来实现&#xff1a;tolog.phpfile_put_contents(/home/fujieace/php/crontab/run.log, date(Y-m-d H:i:s)."\r\n", FI…

C语言中的标识符以字母或下划线开头,牛逼大神整理的C语言基础知识,你确定你不码下来?...

【【怪兽爱C语言】牛逼大神整理的C语言基础知识&#xff0c;你确定你不码下来&#xff1f;】https://toutiao.com/group/6577344220355363341/?iid15906422033&appexplore_article&timestamp1531501720&tt_fromcopy_link&utm_sourcecopy_link&utm_mediumt…

c语言switch同时比较多个变量,C语言学习if和switch分支选择结构

如何判断一个整数是否为正数计算机同我们一样&#xff0c;也是可以判断大小。在此之前&#xff0c;我们需要先说明在计算机中用来判断两个数关系的符号&#xff0c;即关系运算符。关系运算符号c语言中的关系运算符与数学上学习的有什么不同&#xff1f;image.png关系表达式的值…

c语言字符串升序输出,编写程序将已按升序排好的两个字符串a和b中的字符按升序归并到字符串c中,最后输出”abcdefghijklmnpq”。...

满意答案sjoest2014.08.18采纳率&#xff1a;59% 等级&#xff1a;8已帮助&#xff1a;663人(1)char a[]"acegikm"; a数组没有赋予数组大小&#xff0c;所以它的大小&#xff0c;默认等于赋予的字符串长度等于7&#xff0c;所以当strcat(a,b)时&#xff0c;…

c语言指针化简带分数,c语言带分数四则运算问题!!!要求被调函数,化简.

满意答案Lie囡2013.02.03采纳率&#xff1a;58% 等级&#xff1a;12已帮助&#xff1a;8948人#include long int a,b,c,d,x,y,z;char op;int f1();int f2();main(){printf("shu ru di yi ge shu de fen zi:");scanf("%ld",&a);printf("shu ru …

c语言smile定义函数,【C初始之习题五】

1.实现一个函数&#xff0c;打印乘法口诀表&#xff0c;口诀表的行数和列数自己指定&#xff0c;输入9&#xff0c;输出99口诀表&#xff0c;输入12&#xff0c;输出1212的乘法口诀表。#define _CRT_SECURE_NO_WARNINGS#include#includevoid Sum(int x){int num 0;for (int i …

2017年9月计算机二级c语言,2017年9月计算机二级C语言程序设计练习题

2017年9月计算机二级C语言程序设计练习题2017年计算机二级考试即将在九月份进行&#xff0c;你准备好了吗?下面是小编为大家带来的计算机二级C语言程序设计练习题&#xff0c;欢迎阅读。练习题一&#xff1a;阅读程序题1、int x6, y7;printf(“%d,”,x); printf(“%d”,y);程序…

android getter不起作用,java - 如何在Android Studio中自动生成getter和setter

java - 如何在Android Studio中自动生成getter和setterAndroid Studio中是否有一个快捷方式可以自动生成给定类中的getter和setter&#xff1f;14个解决方案454 votes在编辑器中使用Alt Insert for Windows或Command N for Mac&#xff0c;您可以轻松地为类的任何字段生成get…

离散中多重组合是指_PLC编程中如何使用开关、模拟、脉冲量

在工业自动化控制中&#xff0c;经常会遇到开关量&#xff0c;数字量&#xff0c;模拟量&#xff0c;离散量&#xff0c;脉冲量等各种概念&#xff0c;而人们在实际应用中&#xff0c;对于这些概念又很容易混淆。作为电气工程及其自动化设计人员来说&#xff0c;弄清楚这些变量…

Android连接相机WiFi,安卓手机使用佳能相机机身wifi传输拍摄的操作

第一步 相机基础设置首先请确保相机具有WIFI功能&#xff1b;设置相机图像包含JPG格式&#xff1b;3. 相机电源设置&#xff0c;请关闭相机的自动关闭电源功能以保证传输&#xff1a;MENU→“自动关闭电源”→选择“关闭”或“最长时间”&#xff1b;4. ftp设置&#xff0c;…

word论文排版插件_教你如何用word快速搞定论文排版

在疫情影响下&#xff0c;各大高校纷纷开启了远程指导论文/答辩&#xff0c;尽量不影响毕业时间。这不&#xff0c;前段时间湖北武汉科技大学的同学&#xff0c;利用视频在家顺利通过博士学位论文答辩。emmm&#xff0c;人家都答辩完半个月了&#xff0c;回头瞧瞧我们&#xff…

kodi android 键盘,KODI按键映射,看IPTV按键设置

KODI按键映射&#xff0c;看IPTV按键设置2020-04-09 18:10:1016点赞76收藏7评论KODI播放器功能丰富&#xff0c;其中自定义按键功能也是强大&#xff0c;可以让用户修改各个场景下各个按键的功能&#xff0c;网上好多文章没把事情说明白或太复杂&#xff0c;本教程教大家以简单…

不采取任何措施 盒盖_得了癌症如果不化疗能活多久?医生的答案很实在

癌症有不同的治疗手段&#xff0c;有手术&#xff0c;有放疗&#xff0c;有化疗……说到化疗&#xff0c;有人就说千万不要化疗&#xff0c;千万不要化疗&#xff0c;于是很多人拒绝化疗。有人就问&#xff1a;癌症如果不化疗能活多久&#xff1f;癌症如果不化疗能活多久&#…

html 最小边框宽度,css如何让div边框不占宽度?

HTML中&#xff0c;给一个DIV添加一个边框&#xff0c;那么这个DIV的宽度和高度就增加成为这个DIV的宽度加上这个边框的宽度&#xff0c;那么我们如何让边框不占宽度呢&#xff1f;我们做网站时可以添加边框box-sizing属性&#xff1a;让边框不占宽度&#xff0c;在DIV宽度内画…

深圳市收运体系运营管理_华为公司质量管理体系构建和运营实践

导语&#xff1a;质量是一个产品乃至一个企业存在的基石&#xff0c;华为公司的质量管理理念和体系是什么&#xff0c;华为的质量管理如何运营的呢&#xff1f;华为公司如何发挥质量与运营部的作用确保产品和流程高效运作&#xff0c;满足客户需求呢&#xff1f;快来看看吧&…

语言列表导出xlxs_学习五分钟,掌握一种新语言。

有没有一种语言&#xff0c;既实用还能够短时间内学会并应用起来&#xff1f;当然有。小阳今天要教给大家的是一种标记语言——Markdown。经常上网的你&#xff0c;一定有注意到很多网页排版整齐、简洁优美&#xff0c;各级标题区分明显&#xff0c;文章逻辑清晰。难道他们是使…