博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】很多时候我们自己开发一套完整的程序,而仅供商业使用,但是我们并不想对外开源,为了不让自己辛苦开发的系统公之于众,则需要对其进行加密,这个时候对源代码的加密是至关重要了,本文记录一下使用 PHP 内部函数对 PHP 源代码进行加密过程(含解密)。
假设有一个文件 1.php ,里面的内容是:
var_dump('This is PHP ');
而后我们需要对这个文件进行加密,加密代码如下:
header('content-type:text/html;charset=utf-8');
function encode_file_contents($filename) {
$type=strtolower(substr(strrchr($filename,'.'),1));
if ('php' == $type && is_file($filename) && is_writable($filename)) { // 如果是PHP文件 并且可写 则进行压缩编码
$contents = file_get_contents($filename); // 判断文件是否已经被编码处理
$contents = php_strip_whitespace($filename);
// 去除PHP头部和尾部标识
$headerPos = strpos($contents,'<?php');
$footerPos = strrpos($contents,'?>');
$contents = substr($contents, $headerPos + 5, $footerPos - $headerPos);
$encode = base64_encode(gzdeflate($contents)); // 开始编码
echo $encode;
$encode = '<?php'."\n eval(gzinflate(base64_decode("."'".$encode."'".")));\n\n?>";
return file_put_contents($filename, $encode);
}
return false;
}
//调用函数
$filename = '1.php';
encode_file_contents($filename);
echo "OK,加密完成!"
对文件 1.php 执行加密代码,这样 1.php 文件就被加密了,里面的内容被改写成如下:
而 1.php 文件的执行结果依旧是有效的:
那么如何解密呢,如果只对文件 1.php 加密一次,则直接将:
eval(gzinflate(base64_decode('U1AoSyyKTynNLdBQD8nILFYAogCPAAV1TWsFezsA')));
中的 eval 改成 echo ,执行 1.php 即可:
echo(gzinflate(base64_decode('U1AoSyyKTynNLdBQD8nILFYAogCPAAV1TWsFezsA')));
效果如图:
对于多次加密的函数则,依旧将 eval 改成 echo 即可。但是人工操作会比较麻烦,所以还是使用代码来解密:
$a = "eval(gzinflate(base64_decode('这里面放经过若干次加密后的 BASE64 代码')));";
function decodephp($a)
{
$max_level = 300; // 最大层数
for ($i = 0; $i < $max_level; $i++) {
ob_start();
eval(str_replace('eval', 'echo', $a));
$a = ob_get_clean();
if (strpos($a, 'eval(gzinflate(base64_decode') === false) {
return $a;
}
}
}
echo decodephp($a);
这样就是实现的对 PHP 源代码进行加密解密,当然这种加密方式并不是最为安全的,因为就算开发者将源代码通过这种加密方式加密 N 多次,还是很容易就能够被还原回去。本文代码本人亲测有效。
版权归 马富天PHP博客 所有
本文标题:《PHP 源代码加密解密介绍》
本文链接地址:http://www.mafutian.net/287.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
评论审核未开启 |