php加密方法與解密方法
測試檔案
test.php
<?php echo "hello world."; ?>
1.加密方法:
<?php /* eval() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。 strtr() 字符替换 把字符串中的字符 "ia" 替换为 "eo":strtr("Hilla Warld","ia","eo"); */ function T_rndstr($length = "") { //返回随机字符串 $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; if ($length == "") { return str_shuffle($str); } else { return substr(str_shuffle($str), -$length); } } $T_k1 = T_rndstr(); //随机密匙1 $T_k2 = T_rndstr(); //随机密匙2 $vstr = file_get_contents("./test.php"); //要加密的文件 $v1 = base64_encode($vstr); $c = strtr($v1, $T_k1, $T_k2); //根据密匙替换对应字符 $c = $T_k1 . $T_k2 . $c; //$qn变量功能下面会讲解 $isqs = 3; if ($isqs == "1") { // 1 取随机字符串为变量名 $q = T_rndstr(); // 随机字符串 $q1 = substr($q, 2, 3); $q2 = substr($q, 10, 10); $q3 = substr($q, 20, 12); $q4 = substr($q, 30, 10); $q5 = substr($q, 40, 8); $q6 = substr($q, 5, 5); } else if ($isqs == "2") { // 2 为小写l和1组成,开头必须是字母 $q1 = "ll11l1l1"; $q2 = "l1lll11l"; $q3 = "ll1l1lll"; $q4 = "l1lll1l1"; $q5 = "l1l1ll11"; $q6 = "ll111l1l"; } else { // 大写O与数字0组成基本变量 $q1 = "O00O0O"; $q2 = "O0O000"; $q3 = "O0OO00"; $q4 = "OO0O00"; $q5 = "OO0000"; $q6 = "O00OO0"; } $keystr = 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"); /* 字符串,里面必须要有变量所需的字符,比如 base64_decode n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j $q1 = base $q3 = strtr $q4 = substr $q5 = 52 -> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 长度 $q1 .= 64_decode -> base64_decode */ $s = '$' . $q6 . '=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"); $' . $q1 . '=$' . $q6 . '{3}.$' . $q6 . '{6}.$' . $q6 . '{33}.$' . $q6 . '{30}; $' . $q3 . '=$' . $q6 . '{33}.$' . $q6 . '{10}.$' . $q6 . '{24}.$' . $q6 . '{10}.$' . $q6 . '{24}; $' . $q4 . '=$' . $q3 . '{0}.$' . $q6 . '{18}.$' . $q6 . '{3}.$' . $q3 . '{0}.$' . $q3 . '{1}.$' . $q6 . '{24}; $' . $q5 . '=$' . $q6 . '{7}.$' . $q6 . '{13}; $' . $q1 . '.=$' . $q6 . '{22}.$' . $q6 . '{36}.$' . $q6 . '{29}.$' . $q6 . '{26}.$' . $q6 . '{30}.$' . $q6 . '{32}.$' . $q6 . '{35}.$' . $q6 . '{26}.$' . $q6 . '{30}; eval($' . $q1 . '("' . base64_encode('$' . $q2 . '="' . $c . '";eval(\'?>\'.$' . $q1 . '($' . $q3 . '($' . $q4 . '($' . $q2 . ',$' . $q5 . '*2),$' . $q4 . '($' . $q2 . ',$' . $q5 . ',$' . $q5 . '),$' . $q4 . '($' . $q2 . ',0,$' . $q5 . '))));') . '"));'; echo $s; file_put_contents('./test_encode.php', '<?php '.$s.'?>'); ?>
執行加密後產生TEST_ENCODE.PHP檔案
<?php $O00OO0=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"); $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30}; $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24}; $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24}; $OO0000=$O00OO0{7}.$O00OO0{13}; $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; eval($O00O0O("JE8wTzAwMD0iTGhxQk16QW5Zc29qUlVmSVhKZVBGSFF2Q2FwRWtOVFpHY2lXdWxtYmdkclZ5S3R3RFNPeER2Z2pick1mT1hreXVHaFlTVW5FcFF3b1B0Y2lLQ2VSTkhkWlZhVElGc0FMeGxxV3ptSkJFejlXdFFNQ1BkTUZZUGphTzJ2b1lQVWtSWkJYSXhqM0kzVVhSUDRkSlcwbFl6OCt6d2s9IjtldmFsKCc/PicuJE8wME8wTygkTzBPTzAwKCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwKjIpLCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwLCRPTzAwMDApLCRPTzBPMDAoJE8wTzAwMCwwLCRPTzAwMDApKSkpOw==")); ?>
解析
<?php // 所有的$O00OO等等都是变量!!! /* 将 %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%6 解码成 n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j 并赋值给$O00OO0 */ $O00OO0=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"); // 从$O00OO0及其他变量字符串中获取对应字符后组成新的字符串,并赋值给对应的变量 // 例如 $O00OO0{3} 代表 n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j 字符串中的第三个字符,b // $O00O0O = "base" $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30}; // $O0OO00 = "strtr" $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24}; // $OO0O00 = "substr" $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24}; // $OO0000 = "52" $OO0000=$O00OO0{7}.$O00OO0{13}; // $O00O0O = "base64_decode" $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; // 之后通过eval执行php代码 eval($O00O0O("JE8wTzAwMD0iTGhxQk16QW5Zc29qUlVmSVhKZVBGSFF2Q2FwRWtOVFpHY2lXdWxtYmdkclZ5S3R3RFNPeER2Z2pick1mT1hreXVHaFlTVW5FcFF3b1B0Y2lLQ2VSTkhkWlZhVElGc0FMeGxxV3ptSkJFejlXdFFNQ1BkTUZZUGphTzJ2b1lQVWtSWkJYSXhqM0kzVVhSUDRkSlcwbFl6OCt6d2s9IjtldmFsKCc/PicuJE8wME8wTygkTzBPTzAwKCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwKjIpLCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwLCRPTzAwMDApLCRPTzBPMDAoJE8wTzAwMCwwLCRPTzAwMDApKSkpOw==")); /* eval会执行后面的PHP代码 第一步为解码 $O00O0O 为 "base64_decode"。 即对后面的字符串进行base64解码 JE8wTzAwMD0iTGhxQk16QW5Zc29qUlVmSVhKZVBGSFF2Q2FwRWtOVFpHY2lXdWxtYmdkclZ5S3R3RFNPeER2Z2pick1mT1hreXVHaFlTVW5FcFF3b1B0Y2lLQ2VSTkhkWlZhVElGc0FMeGxxV3ptSkJFejlXdFFNQ1BkTUZZUGphTzJ2b1lQVWtSWkJYSXhqM0kzVVhSUDRkSlcwbFl6OCt6d2s9IjtldmFsKCc/PicuJE8wME8wTygkTzBPTzAwKCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwKjIpLCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwLCRPTzAwMDApLCRPTzBPMDAoJE8wTzAwMCwwLCRPTzAwMDApKSkpOw== 解码后 $O0O000="LhqBMzAnYsojRUfIXJePFHQvCapEkNTZGciWulmbgdrVyKtwDSOxDvgjbrMfOXkyuGhYSUnEpQwoPtciKCeRNHdZVaTIFsALxlqWzmJBEz9WtQMCPdMFYPjaO2voYPUkRZBXIxj3I3UXRP4dJW0lYz8+zwk="; eval('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000)))); 第二步是执行解码后的代码 解码后为另外一份代码,根据加密算法可知$O0O000变量的值为密钥1+密钥2+源代码编码并进行替换后的字符串, 这边先将替换掉的字符串还原回去,之后再进行base64_decode进行解码,即可获得原来的代码!!! 注意:由于源代码已经包含<?php ?>,所以这边必须加入'?>' */ ?>
2.解密方法
<?php // 加密的文件格式必须固定!! /* $O00OO0=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"); $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30}; $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24}; $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24}; $OO0000=$O00OO0{7}.$O00OO0{13}; $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; eval($O00O0O("JE8wTzAwMD0iTmV5SElCamZRdk......1UYVNuUUpnY21UYVVoOCtoTm89IjtldmFsKCc/=="));?> */ // 要解密的文件,去掉php标识 $encode_sourcecode = file_get_contents("./test_e.php"); $encode_sourcecode = str_replace('<?php','', $encode_sourcecode); $encode_sourcecode = str_replace('?>','', $encode_sourcecode); // 提取第一次需要解密的内容 // 即JE8wTzAwMD0iTmV5SElCamZRdk......1UYVNuUUpnY21UYVVoOCtoTm89IjtldmFsKCc/== echo '</br></br>------------------------------$encode_sourcecode_content</br>'; $start = strripos($encode_sourcecode, '("') + 2; $end = strripos($encode_sourcecode, '")'); $encode_sourcecode_content = substr($encode_sourcecode, $start, $end - $start); echo $encode_sourcecode_content; // 解密加密部分的代码后的内容 // $O0O000="NeyHIBjfQvDMwo......JoSptgMdl3M3JgSKQTiB0nuh8+hNo="; eval('......OO0000)))); echo '</br></br>------------------------------$decode_sourcecode_content</br>'; $decode_sourcecode_content = base64_decode($encode_sourcecode_content); echo $decode_sourcecode_content; // 解密后还是一个加密的代码,需要再次解码,所以要再次提取需要被解密的内容出来 // 即NeyHIBjfQvDMwo......JoSptgMdl3M3JgSKQTiB0nuh8+hNo= echo '</br></br>------------------------------$decode_sourcecode_content_encode_content</br>'; $start = stripos($decode_sourcecode_content, '"') + 1; $end = strripos($decode_sourcecode_content, '"') ; $decode_sourcecode_content_encode_content = substr($decode_sourcecode_content, $start, $end - $start); echo $decode_sourcecode_content_encode_content; // 根据加密规则,替换字符并解码,即可得到原文件 echo '</br></br>------------------------------$decode_sourcecode_content_encode_content</br>'; $origin_content = base64_decode(strtr( substr($decode_sourcecode_content_encode_content, 104), substr($decode_sourcecode_content_encode_content, 52, 52), substr($decode_sourcecode_content_encode_content, 0, 52))); var_dump($origin_content); file_put_contents('./test_origin.php', $origin_content); ?>
以上是php加密方法與解密方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
