温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP如何实现图片加密解密

发布时间:2021-06-25 10:15:34 阅读:630 作者:小新 栏目:开发技术
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章将为大家详细讲解有关PHP如何实现图片加密解密,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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

直接上代码

PHP如何实现图片加密解密

PHP如何实现图片加密解密

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 "\r\n\r\n";
    //在指定文件夹下创建临时文件夹
    $temp_dir $path '\\' . 'temp';
    @mkdir($temp_dir07771);

    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($fhfilesize($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_dir07771);

    //核心正则
    $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($hffilesize($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如何实现图片加密解密”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI

开发者交流群×