php加密與解密的方法

來源:互聯網
上載者:User
測試檔案

test.php

<?phpecho "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_decoden1zb/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); ?>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.