php实现图片加密解密,支持加盐

高洛峰
发布: 2016-10-10 11:08:53
原创
1538人浏览过

一个简单的图片加解密函数

使用client跑,不要使用浏览器跑

1.jpg

1.jpg

度加剪辑
度加剪辑

度加剪辑(原度咔剪辑),百度旗下AI创作工具

度加剪辑63
查看详情 度加剪辑

1.png

立即学习PHP免费学习笔记(深入)”;

<?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 . "

";
        //在指定文件夹下创建临时文件夹
        $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 . "
";
                    @unlink($dir_path);
                }
                else
                {
                    echo "加密 : " . $dir_path . "
";
                }
                $time3 = microtime(1);
                echo "此图用时 ", ($time3 - $time2), " S
", "已经用时 ", ($time3 - $time1), " S

";
            }
        }

        echo "加密完成
";
    }
    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 . "

";
        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] . "
";
                        @unlink($file_path);
                    }
                    else
                    {
                        echo "解密 : " . $temp_dir . '\' . $res[1][0] . "
";
                    }
                }
                $time3 = microtime(1);
                echo "此图用时 ", ($time3 - $time2), " S
", "已经用时 ", ($time3 - $time1), " S

";
            }
        }
        if(!$count)
        {
            echo "没有有效的加密文件
";
            return false;
        }
        echo "解密完成
";
    }
    else
    {
        echo "path invalid ";
        return false;
    }
}

?>
登录后复制
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号