cari
Rumahpembangunan bahagian belakangtutorial phpphp代码加密解密类的示例(完整代码)

本篇文章给大家带来的内容是关于php代码加密解密类的示例(完整代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

php 代码加密类,大家可以根据自己的需求进行修改,原类如下,该实例在ubuntu下测试没有问题。

<?php

class Encryption{

    private $c=&#39;&#39;;//存储密文

    private $s=&#39;&#39;,$q1,$q2,$q3,$q4,$q5,$q6;//存储生成的加密后的文件内容

    //如果不设置一个值,isset会表示不存在;

    private $file=&#39;&#39;;//读取文件的路径

    private $source=&#39;&#39;,$target=&#39;&#39;;

    //构造函数,实例化时调用初始化全局变量;

    public function __construct(){

      //初始化全局变量

      $this->initialVar();

      //echo "hello \n";

    }

    /*

    *@input $property_name,$value

    *@output

    *  魔法方法,对变量进行设置值;可根据需求进行处理。若直接去除if判断表示可用设置任何属性的值,包括不存在的属性;

    */

    public function __set($property_name,$value){

      //定义过的变量;

      if(isset($this->$property_name)){

        $this->$property_name = $value;

      }else{

        //异常处理,处理未声明的变量赋值;可根据需求进行处理。

        throw new Exception("property does not exist");

      }

    }

    //魔法方法 取出变量的值;

    public function __get($property_name){

      if(isset($this->$property_name)){

        return $this->$property_name;

      }else{

        //throw new Exception("property does not exist");

        return NULL;

      }

    }

    //取随机排序

    private function RandAbc($length=""){//随机排序取回

     $str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

     return str_shuffle($str);

    }

    //对明文内容进行加密处理

    private function ciphertext($filename){

      //$filename=&#39;index.php&#39;;

      $T_k1=$this->RandAbc();

      $T_k2=$this->RandAbc();

      $vstr=file_get_contents($filename);

      $v1=base64_encode($vstr);

      $c=strtr($v1,$T_k1,$T_k2);

      $this->c=$T_k1.$T_k2.$c;

      return $this;

    }

    //初始化变量

    private function initialVar(){

      $this->q1="O00O0O";//base64_decode

      $this->q2="O0O000";//$c(原文经过strtr置换后的密文,由 目标字符+替换字符+base64_encode(‘原文内容&#39;)构成)

      $this->q3="O0OO00";//strtr

      $this->q4="OO0O00";//substr

      $this->q5="OO0000";//52

      $this->q6="O00OO0";//urldecode解析过的字符串(n1zb/ma5\vt0i28-pxuqy*6%6Crkdg9_ehcswo4+f37j)

    }

    //生成加密后的模板(复杂版本);

    private function model(){

      //$c = $this->c;

      //$this->initialVar();

      $this->s=&#39;<?php $&#39;.$this->q6.&#39;=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$&#39;.

      $this->q1.&#39;=$&#39;.$this->q6.&#39;{3}.$&#39;.$this->q6.&#39;{6}.$&#39;.$this->q6.&#39;{33}.$&#39;.$this->q6.&#39;{30};$&#39;.$this->q3.&#39;=$&#39;.$this->q6.&#39;{33}.$&#39;.$this->q6.&#39;{10}.$&#39;

      .$this->q6.&#39;{24}.$&#39;.$this->q6.&#39;{10}.$&#39;.$this->q6.&#39;{24};$&#39;.$this->q4.&#39;=$&#39;.$this->q3.&#39;{0}.$&#39;.$this->q6.&#39;{18}.$&#39;.$this->q6.&#39;{3}.$&#39;.$this->q3.&#39;{0}

      .$&#39;.$this->q3.&#39;{1}.$&#39;.$this->q6.&#39;{24};$&#39;.$this->q5.&#39;=$&#39;.$this->q6.&#39;{7}.$&#39;.$this->q6.&#39;{13};$&#39;.$this->q1.&#39;.=$&#39;.$this->q6.&#39;{22}.$&#39;.$this->q6.&#39;{36}

      .$&#39;.$this->q6.&#39;{29}.$&#39;.$this->q6.&#39;{26}.$&#39;.$this->q6.&#39;{30}.$&#39;.$this->q6.&#39;{32}.$&#39;.$this->q6.&#39;{35}.$&#39;.$this->q6.&#39;{26}.$&#39;.$this->q6.&#39;{30};

      eval($&#39;.$this->q1.&#39;("&#39;.base64_encode(&#39;$&#39;.$this->q2.&#39;="&#39;.$this->c.&#39;";

      eval(\&#39;?>\&#39;.$&#39;.$this->q1.&#39;($&#39;.$this->q3.&#39;($&#39;.$this->q4.&#39;($&#39;.$this->q2.&#39;,$&#39;.$this->q5.&#39;*2),$&#39;.$this->q4.&#39;($&#39;.$this->q2.&#39;,$&#39;.$this->q5.&#39;,$&#39;.$this->q5.&#39;),

      $&#39;.$this->q4.&#39;($&#39;.$this->q2.&#39;,0,$&#39;.$this->q5.&#39;))));&#39;).&#39;"));?>&#39;;

      return $this;

    }

    //创建加密文件

    private function build($target){

      //$this->encodes("./index.php");

      //$this->model();

      $fpp1 = fopen($target,&#39;w&#39;);

      fwrite($fpp1,$this->s) or die(&#39;写入是失败!&#39;);

      fclose($fpp1);

      return $this;

    }

    //加密处理 连贯操作

    public function encode($file,$target){

      //$file = "index.php";

      //连贯操作其实就是利用函数处理完后返回自身

      $this->ciphertext($file)->model()->build($target);

      echo &#39;encode------&#39;.$target.&#39;-----ok<br/>&#39;;

    }

    //解密

    public function decode($file,$target=&#39;&#39;){

      //读取要解密的文件

      $fpp1 = file_get_contents($file);

      $this->decodeMode($fpp1)->build($target);

      echo &#39;decode------&#39;.$target.&#39;-----ok<br/>&#39;;

    }

    //解密模板,得到解密后的文本

    private function decodeMode($fpp1){

      //以eval为标志 截取为数组,前半部分为密文中的替换掉的函数名,后半部分为密文

      $m = explode(&#39;eval&#39;,$fpp1);

      //对系统函数的替换部分进行执行,得到系统变量

      $varStr = substr($m[0],strpos($m[0],&#39;$&#39;));

      //执行后,后续就可以使用替换后的系统函数名

      eval($varStr);

      //判断是否有密文

      if(!isset($m[1])){

        return $this;

      }

      //对密文进行截取 {$this->q4} substr

      $star = strripos($m[1],&#39;(&#39;);

      $end = strpos($m[1],&#39;)&#39;);

      $str = ${$this->q4}($m[1],$star,$end);

      //对密文解密 {$this->q1} base64_decode

      $str = ${$this->q1}($str);

      //截取出解密后的 核心密文

      $evallen = strpos($str,&#39;eval&#39;);

      $str = substr($str,0,$evallen);

      //执行核心密文 使系统变量被赋予值 $O0O000

      eval($str);

      //并不能将如下段封装,因为 ${$this->qn} 并不能在全文中起作用

      $this->s = ${$this->q1}(

        ${$this->q3}(

          ${$this->q4}(

            ${$this->q2},${$this->q5}*2

          ),

          ${$this->q4}(

            ${$this->q2},${$this->q5},${$this->q5}

          ),

          ${$this->q4}(

            ${$this->q2},0,${$this->q5}

          )

        )

      );

      return $this;

    }

    //递归读取并创建目标目录结构

    private function targetDir($target){

      if(!empty($target) ) {

        if(!file_exists($target)){

          mkdir($target,0777,true);

        }else{

          chmod($target,0777);

        }

      }

    }

    //递归解密 对指定文件夹下的php文件解密

    public function decodeDir($source,$target=""){

      if(is_dir($source)){

        $this->targetDir($target);

        $dir = opendir($source);

        while(false!=$file=readdir($dir))

        {

          //列出所有文件并去掉&#39;.&#39;和&#39;..&#39; 此处用的实例为thinkphp框架,所以默认排除里Thinkphp目录,用户可以按照自己的需求设置

          if($file!=&#39;.&#39; && $file!=&#39;..&#39; && $file !=&#39;ThinkPHP&#39;)

          {

            $path = $target.DIRECTORY_SEPARATOR.$file;

            $sourcePath = $source.DIRECTORY_SEPARATOR.$file;

            $this->decodeDir($sourcePath,$path);

          }

        }

      }else if(is_file($source)){

        $extension=substr($source,strrpos($source,&#39;.&#39;)+1);

        if(strtolower($extension)==&#39;php&#39;){

          $this->decode($source,$target);

        }else{

          //不是php的文件不处理

          copy($source, $target);

        }

        //return;

      }

    }

    //递归加密 对指定文件夹下的php文件加密

    public function encodeDir($source,$target){

      if(is_dir($source)){

        $this->targetDir($target);

        $dir = opendir($source);

        while(false!=$file=readdir($dir))

        {

          //列出所有文件并去掉&#39;.&#39;和&#39;..&#39;

          if($file!=&#39;.&#39; && $file!=&#39;..&#39; && $file !=&#39;ThinkPHP&#39;)

          {

            $path = $target.DIRECTORY_SEPARATOR.$file;

            $sourcePath = $source.DIRECTORY_SEPARATOR.$file;

            $this->encodeDir($sourcePath,$path);

          }

        }

      }else if(is_file($source)){

        $extension=substr($source,strrpos($source,&#39;.&#39;)+1);

        if(strtolower($extension)==&#39;php&#39;){

          $this->encode($source,$target);

        }else{

          copy($source, $target);

        }

      }

    }

}

$ob = new Encryption();

$ob->source = "/var/www/bookReservation";

$ob->target = "/var/www/jiami/bookReservation";

//解密指定文件

//$ob->decode(&#39;D:\\php\\WWW\\workspace\\weixin2\\Application\\Home\\Controller\\IndexController.class.php&#39;);

//$ob->decode(&#39;jiami.php&#39;);

//$ob->decode(&#39;dam6.php&#39;);

//对一个指定的文件目录进行加密

$ob->encodeDir($ob->source,$ob->target);

//对一个指定的文件目录进行解密

$ob->decodeDir($ob->target,"/var/www/jiami/bookReservationD");

相关推荐:

加密解密 PHP加密解密类

PHP加密解密函数详解,加密解密函数详解

PHP url 加密解密函数_PHP教程

Atas ialah kandungan terperinci php代码加密解密类的示例(完整代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Apakah beberapa masalah biasa yang boleh menyebabkan sesi PHP gagal?Apakah beberapa masalah biasa yang boleh menyebabkan sesi PHP gagal?Apr 25, 2025 am 12:16 AM

Sebab -sebab kegagalan phpsession termasuk kesilapan konfigurasi, isu cookie, dan tamat tempoh sesi. 1. Ralat Konfigurasi: Semak dan tetapkan session.save_path yang betul. Masalah 2.Cookie: Pastikan kuki ditetapkan dengan betul. 3.Session Expires: Laraskan Nilai Sesi.GC_MAXLifetime untuk melanjutkan masa sesi.

Bagaimanakah anda menyebarkan isu berkaitan sesi dalam PHP?Bagaimanakah anda menyebarkan isu berkaitan sesi dalam PHP?Apr 25, 2025 am 12:12 AM

Kaedah untuk masalah sesi debug dalam PHP termasuk: 1. Periksa sama ada sesi dimulakan dengan betul; 2. Sahkan penghantaran ID sesi; 3. Semak penyimpanan dan bacaan data sesi; 4. Semak konfigurasi pelayan. Dengan mengeluarkan ID dan data sesi, melihat kandungan fail sesi, dan lain-lain, anda boleh mendiagnosis dan menyelesaikan masalah yang berkaitan dengan sesi.

Apa yang berlaku jika session_start () dipanggil beberapa kali?Apa yang berlaku jika session_start () dipanggil beberapa kali?Apr 25, 2025 am 12:06 AM

Pelbagai panggilan ke session_start () akan menghasilkan mesej amaran dan kemungkinan penggantian data. 1) PHP akan mengeluarkan amaran, menyebabkan sesi telah dimulakan. 2) Ia boleh menyebabkan penggantian data sesi yang tidak dijangka. 3) Gunakan session_status () untuk memeriksa status sesi untuk mengelakkan panggilan berulang.

Bagaimana anda mengkonfigurasi seumur hidup sesi di PHP?Bagaimana anda mengkonfigurasi seumur hidup sesi di PHP?Apr 25, 2025 am 12:05 AM

Mengkonfigurasi kitaran hayat sesi dalam PHP boleh dicapai dengan menetapkan sesi.gc_maxlifetime dan session.cookie_lifetime. 1) session.gc_maxlifetime mengawal masa survival data sesi pelayan, 2) session.cookie_lifetime mengawal kitaran hayat kuki klien. Apabila ditetapkan ke 0, kuki tamat apabila penyemak imbas ditutup.

Apakah kelebihan menggunakan pangkalan data untuk menyimpan sesi?Apakah kelebihan menggunakan pangkalan data untuk menyimpan sesi?Apr 24, 2025 am 12:16 AM

Kelebihan utama menggunakan sesi penyimpanan pangkalan data termasuk kegigihan, skalabilitas, dan keselamatan. 1. Kegigihan: Walaupun pelayan dimulakan semula, data sesi tidak dapat berubah. 2. Skalabiliti: Berkenaan dengan sistem yang diedarkan, memastikan data sesi disegerakkan di antara pelbagai pelayan. 3. Keselamatan: Pangkalan data menyediakan storan yang disulitkan untuk melindungi maklumat sensitif.

Bagaimana anda melaksanakan pengendalian sesi tersuai di PHP?Bagaimana anda melaksanakan pengendalian sesi tersuai di PHP?Apr 24, 2025 am 12:16 AM

Melaksanakan pemprosesan sesi tersuai dalam PHP boleh dilakukan dengan melaksanakan antara muka sessionHandlerInterface. Langkah -langkah khusus termasuk: 1) mewujudkan kelas yang melaksanakan sessionHandlerInterface, seperti CustomSessionHandler; 2) kaedah penulisan semula dalam antara muka (seperti terbuka, rapat, membaca, menulis, memusnahkan, gc) untuk menentukan kitaran hayat dan kaedah penyimpanan data sesi; 3) Daftar pemproses sesi tersuai dalam skrip PHP dan mulakan sesi. Ini membolehkan data disimpan dalam media seperti MySQL dan REDIS untuk meningkatkan prestasi, keselamatan dan skalabiliti.

Apakah ID Sesi?Apakah ID Sesi?Apr 24, 2025 am 12:13 AM

SesionID adalah mekanisme yang digunakan dalam aplikasi web untuk mengesan status sesi pengguna. 1. Ia adalah rentetan yang dijana secara rawak yang digunakan untuk mengekalkan maklumat identiti pengguna semasa pelbagai interaksi antara pengguna dan pelayan. 2. Pelayan menjana dan menghantarnya kepada klien melalui kuki atau parameter URL untuk membantu mengenal pasti dan mengaitkan permintaan ini dalam pelbagai permintaan pengguna. 3. Generasi biasanya menggunakan algoritma rawak untuk memastikan keunikan dan ketidakpastian. 4. Dalam pembangunan sebenar, pangkalan data dalam memori seperti REDIS boleh digunakan untuk menyimpan data sesi untuk meningkatkan prestasi dan keselamatan.

Bagaimanakah anda mengendalikan sesi dalam persekitaran tanpa kerakyatan (mis., API)?Bagaimanakah anda mengendalikan sesi dalam persekitaran tanpa kerakyatan (mis., API)?Apr 24, 2025 am 12:12 AM

Menguruskan sesi dalam persekitaran tanpa kerakyatan seperti API boleh dicapai dengan menggunakan JWT atau cookies. 1. JWT sesuai untuk ketiadaan dan skalabilitas, tetapi ia adalah saiz yang besar ketika datang ke data besar. 2.Cookies lebih tradisional dan mudah dilaksanakan, tetapi mereka perlu dikonfigurasikan dengan berhati -hati untuk memastikan keselamatan.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft