php实现图片加密解密,支持加盐
一个简单的图片加解密函数
使用client跑,不要使用浏览器跑
qq845875470 ,技术交流



<?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实现图片加密解密,支持加盐的更多相关文章
- RSA加密解密与加签验签
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年7月首次在美国公布 ...
- c# 图片加密解密的实例代码
c# 图片加密解密的实例代码. 代码: using System; using System.Collections.Generic; using System.Text; using System. ...
- md5加密,md5加盐加密和解密
package com.java.test; import java.security.MessageDigest; import java.security.SecureRandom; import ...
- 手摸手带你认识https涉及的知识,并实现https加密解密,加签解签
目录 http访问流程 https访问流程 证书 加密/解密 加签/验签 Java实现https 拓展 @ 看完整的代码,直接去完整代码实现,看实现完后会遇到的坑,直接去测试过程中的问题,包括经过代理 ...
- cocos2dx图片加密解密(npk方式)
话不多说,直接开始: 准备的工具: 链接:https://pan.baidu.com/s/1Om4kBNWcG2jL_RTsHqqzpQ 提取码:bv7i npkCreate.exe是加密图片的工具, ...
- C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出
差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- [转]加盐hash保存密码的正确方式
0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码, ...
- 基于正则的INI读写工具类,支持加密解密
看到这个标题,有人会问,现在都用xml做配置文件了,谁还用INI文件啊!下面来简单对比一下xml和ini: 1.XML功能强大表达能力强,同时扩展性好. 2.它的主要优势是异构平台的整合.通讯. 3. ...
随机推荐
- Souerce 之 图片格式
一.基本概念 1.矢量图与位图 1)矢量图-完美的几何图形 矢量图是通过组成图形的一些基本元素,如点.线.面,边框,填充色等信息通过计算的方式来显示图形的.就好比我们在几何学里面描述一个圆可以通过它的 ...
- Calculate the formula
Problem Description You just need to calculate the sum of the formula: 1^2+3^2+5^2+……+ n ^2. Input ...
- 【Mood-6】空气显示触摸屏、智能钱夹
空气显示触摸屏 这款屏幕借助从设备中送出的空气和水在空中形成投影,可以用来展示计算机或平板中的图像.此外,它还可以实现人机互动.你只需在虚拟屏幕前挥动双手,就能完成一系列的隔空操作,如滑动.捏合.缩放 ...
- Java学习笔记——Java工厂模式之简单工厂
package com.app; import java.util.Date; /* * 工厂模式:简单工厂.工厂方法.抽象工厂 * * */ public class Test0718_Factor ...
- C++构造/析构/赋值函数
在编写C++程序的时候,我们会为特定某一类对象申明类类型,几乎我们申明的每一个class都会有一个或多个构造函数.一个析构函数.一个赋值运算符重载=.以及拷贝构造函数.这些函数控制着类对象的基础操作, ...
- CF Two Substrings
Two Substrings time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- poj 1821 动态规划
思路:每次枚举每个工人的右边界j,维护最优的左边界k.那么dp[j]=max(dp[j],dp[k]+(j-k)*w[i].p): 对于每个工人的初值k=w[i].s-1; 令x=j-w[i].l,如 ...
- iOS10.1不能调试解决方案
对于一些有强迫证的程序员来说只要苹果更新系统,会马上更新,但是军哥更新过10.1的系统后发现Xcode8不能调试了 苹果这次太不人性话了,解决办法,最简单的是 拷贝iOS10.1支持文件放在Xcode ...
- Table of Contents - Jersey
Jersey 1.19.1 Getting Started Get started with Jersey using the embedded Grizzly server Get started ...
- 基于ASP.Net +easyUI框架上传图片,判断格式+实现即时浏览
<div> 选择图片:<input id="idFile" style="width:224px" runat="server&qu ...