大连249建站之家免费精品网站自助建设系统平台免费微
首页 >> 技术分享 >>技术干货 >> 249建站之家:PHP实现支持加盐的图片加密解密
详细内容

249建站之家:PHP实现支持加盐的图片加密解密

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

话不多说,直接上代码

大连249建站之家免费精品网站自助建设系统平台免费微信小程序

大连249建站之家免费精品网站自助建设系统平台免费微信小程序

大连249建站之家免费精品网站自助建设系统平台免费微信小程序


<?php

 

$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;

  }

}

 

?>


联系我们
更多

联系电话:0411-66373325

联系地址:大连市沙河口区富民广场

公司邮箱:2058793689@qq.com

备案信息:Copyright © 2016-2025,www.my249.com,All rights reserved

辽ICP备17015910号-1

seo seo