首页 > 编程 > PHP > 正文

php加密与解密

2020-03-22 19:52:55
字体:
来源:转载
供稿:网友
  • 参考http://biancheng.dnbcw.info/php/111642.html整理的代码。

    测试文件

    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_decoden1zb/ma5t0i28-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/ma5t0i28-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/ma5t0i28-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); ?>

    urldecode可以到http://tool.chinaz.com/tools/urlencode.aspx进行解码

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表