php实现图片加密解密,支持设置密码 (两年后版本!)

 

基于php的图片加密解密类,支持设置密码,情侣们的福音!

先看效果

上代码

 

<?php
    /**
     * by hello
     * 84587470
     *
     * php 文件加密类,支持设置密码,图片,文件都可以!情侣们的福音!!!
     * 
     */
    $from = 'C:\Users\Administrator\Desktop\t\test.png';
    $to = 'C:\Users\Administrator\Desktop\t\\';

    //加密
    encrpty::en($from , $to , 'xxxx');

    //解密
    encrpty::de('C:\Users\Administrator\Desktop\t\00f8fbb037778e31455211b4bdcb0874' , $to , 'xxxx');


    class encrpty
    {
        const DS = DIRECTORY_SEPARATOR;
        const FILE = 1;
        const DIRECTORY = 2;
        const ALL = 3;

        /**
         * 文件加密
         *
         * @param        $from  源
         * @param        $to    保存位置
         * @param string $slat  密码
         *
         * @return array
         */
        public static function en($from , $to , $slat = 'xxx')
        {
            $data = [
                'sign' => 1 ,
                'msg'  => '' ,
            ];
            try
            {
                $imgObj = new \SplFileInfo($from);
                $stram = implode('' , [
                        '@@_____' ,
                        $slat ,
                        '@@_____' ,
                        $imgObj->getBasename() ,
                        '@@_____' ,
                    ]) . (file_get_contents($imgObj->getRealPath()));
                $stram = gzcompress($stram);
                file_put_contents(static::replaceToSysSeparator($to) . md5($imgObj->getRealPath()) , ($stram));
            } catch (\Exception $exception)
            {
                $data['sign'] = 0;
                $data['data'] = $exception->getMessage();
            }

            return $data;
        }

        /**
         * 解密
         *
         * @param        $from  源
         * @param        $to    保存位置
         * @param string $slat  密码
         *
         * @return array
         */
        public static function de($from , $to , $slat = 'xxx')
        {
            $data = [
                'sign' => 1 ,
                'msg'  => '' ,
            ];
            try
            {
                $imgObj = new \SplFileInfo($from);
                $stram = file_get_contents($imgObj->getRealPath());
                $stram = gzuncompress($stram);
                $reg = implode('' , [
                    '#' ,
                    '^@@_____' ,
                    preg_quote($slat , '#') ,
                    '@@_____' ,
                    '(.*?)' ,
                    '@@_____' ,
                    '#i' ,
                ]);

                preg_match($reg , $stram , $res);
                if(isset($res[1]))
                {
                    self::mkdir_($to);
                    $result = preg_replace($reg , '' , $stram);
                    file_put_contents(static::endDS($to) . $res[1] , $result);
                }
                else
                {
                    $data['sign'] = 0;
                    $data['data'] = '解密出错';
                }
            } catch (\Exception $exception)
            {
                $data['sign'] = 0;
                $data['data'] = $exception->getMessage();
            }

            return $data;
        }

        /**
         * 自动为路径后面加DIRECTORY_SEPARATORY
         *
         * @param string $path 文件夹路径
         *
         * @return string
         */
        public static function endDS($path)
        {
            return rtrim(rtrim(static::replaceToSysSeparator($path) , '/') , '\\') . static::DS;
        }


        /**
         * @param $path
         *
         * @return string
         */
        public static function replaceToSysSeparator($path)
        {
            return strtr($path , [
                '\\' => static::DS ,
                '/'  => static::DS ,
            ]);
        }

        /**
         * @param $path
         *
         * @return string
         */
        public static function replaceToUrlSeparator($path)
        {
            return strtr($path , [
                '\\' => '/' ,
            ]);
        }

        /**
         * 格式化字节大小
         *
         * @param  number     $size 字节数
         * @param string |int $de
         *
         * @return string            格式化后的带单位的大小
         */
        public static function byteFormat($size , $de = 2)
        {
            $a = array(
                "B" ,
                "KB" ,
                "MB" ,
                "GB" ,
                "TB" ,
                "PB" ,
            );
            $pos = 0;
            while ($size >= 1024)
            {
                $size /= 1024;
                $pos++;
            }

            return round($size , $de) . " " . $a[$pos];
        }


        /**
         * 创建文件夹
         *
         * @param     $path
         * @param int $mode
         *
         * @return bool
         */
        public static function mkdir_($path , $mode = 0777)
        {
            return !is_dir(($path)) ? mkdir(($path) , $mode , 1) : @chmod($path , $mode);
        }


        /**
         * 列出文件夹里文件信息
         *
         * @param               $path
         * @param callable|null $callback
         * @param int           $flag
         *
         * @return array
         */
        public static function listDir($path , callable $callback = null , $flag = self::ALL)
        {
            $files = [];
            if(is_dir($path) && is_readable($path))
            {
                try
                {
                    $directory = new \FilesystemIterator ($path);

                    $filter = new \CallbackFilterIterator ($directory , function($current , $key , $iterator) use ($flag) {
                        switch ($flag)
                        {
                            case static::FILE:
                                return $current->isFile();
                            case static::DIRECTORY:
                                return $current->isDir();
                            default:
                                return true;
                        }
                    });

                    foreach ($filter as $info)
                    {
                        if(is_callable($callback))
                        {
                            $files[] = call_user_func_array($callback , [
                                $info ,
                            ]);
                        }
                        else
                        {
                            $files[] = $info;
                        }
                    }

                } catch (\Exception $e)
                {
                    $files = [];
                }
            }

            return $files;
        }

    }

 

posted @ 2018-11-23 16:45  shut_up  阅读(1954)  评论(0编辑  收藏  举报