题目:在线加密解密系统
项目完成人:2021160362韩东平(组长)、2021160345唐骏(组员)、2021160347王廷凯(组员)
语言及安装包:本网站基于php实现在线加密解密,部署ssl证书,设计一个用户界面,使用户能够输入待加密或待解密的数据,并选择所需的加密或解密算法,配置您的服务器以使用 SSL 证书。这可能涉及到在您的 Web 服务器上安装和配置证书,例如 Apache 或 Nginx,用户可以通过https访问
一、功能介绍
本软件的意义:
- 保护源代码:PHP 是一种脚本语言,源代码是以明文形式存储在服务器上的。通过对 PHP 代码进行加密,可以增加源代码的保密性,使其更难以被未经授权的人员获取和理解。这对于一些商业应用程序或具有商业价值的软件来说尤为重要,以防止他人盗取您的代码。
- 防止篡改:通过对 PHP 代码进行加密,可以提高代码的完整性和安全性。加密后的代码更难以被篡改,减少了潜在的恶意攻击和漏洞利用的可能性。
- 保护敏感信息:如果您的 PHP 代码中包含敏感信息,例如数据库连接凭证、API 密钥等,加密代码可以增加这些敏感信息的保护。即使代码被获取,加密也可以防止直接暴露这些敏感信息
本软件是一个基于 PHP 实现的在线加密解密系统,它具有以下主要功能:
- 加密功能:用户可以输入待加密的数据,并选择所需的加密算法进行加密。系统将对输入的数据进行加密处理,并生成相应的加密结果。
- 解密功能:用户可以输入待解密的数据,并选择所需的解密算法进行解密。系统将对输入的数据进行解密处理,并生成相应的解密结果。
- 多算法支持:系统支持多种加密解密算法,如 AES、DES、RSA 等。用户可以根据需求选择合适的算法进行加密解密操作。
- 用户界面:系统提供一个用户友好的界面,使用户可以方便地输入数据、选择算法并查看加密解密结果。
- 数据安全性:系统通过部署 SSL 证书,使用 HTTPS 协议来确保数据在传输过程中的安全性。SSL 证书能够加密用户与服务器之间的通信,防止数据被窃取或篡改。
该加密解密系统可以用于各种数据保护需求,例如保护敏感信息、传输加密数据等。用户可以根据实际需要使用该系统来保护其数据的机密性和完整性。
二、界面示例及代码说明
首先输入账号和密码进入软件界面首页,如下图所示。
1、部署ssl证书
作为一种安全浏览互联网的技术,SSL证书确保了从浏览器到服务器之间传输的数据的机密性和完整性。目的是为了保护银行交易,保护登陆凭证等等。所以,SSL证书的全部重要性是保护 Web 应用程序。
在未安装SSL证书时,用户和服务器之间的信息传输是明文的,容易被外界截取;而且对最终用户来讲,他们在浏览服务器时,并不知道这个服务器、网页是否真的存在,如果存在,信息是否真实可信。
1、申请ssl证书
-
- 购买证书:您可以从受信任的证书颁发机构购买 SSL 证书。 从腾讯云购买 。您可以在它们的官方网站上选择适合您需求的证书,并按照购买流程进行操作。
- 免费证书:我们购买了一个域名,然后申请的免费证书。
-
- 根据您获得的 SSL 证书,您将收到包含证书链和私钥的文件。通常,这些文件的格式是 PEM 或 PFX。
- PEM 格式:将证书链和私钥文件保存为以 .crt 或 .pem 为扩展名的文件。
- PFX 格式:将证书链和私钥文件保存为以 .pfx 为扩展名的文件
2、下载ssl的证书密钥,并进行部署。
3、进行网站的备案
2、搭建网站
PHP作为开源语言,发展至今已有很多成熟的国内外开源系统,足以满足个人和企业用户自己建立WEB站点,但是容易受到攻击者的攻击,下面则主要介绍PHP做网站的步骤和流程:
设计网站首页源码:
<?php @header('Content-Type: text/html; charset=UTF-8'); include("./includes/common.php"); ?> <!doctype html> <html class="no-js" lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title><?php echo $conf['title']?> - PHP在线加密-简单-快捷-方便-便宜-安全可靠</title> <meta name="keywords" content="<?php echo $conf['title']?>PHP在线加密,PHP源码加密,PHP加密,PHP在线加密,PHP代码加密,PHP文件加密,混淆加密,模板加密"> <meta name="description" content="<?php echo $conf['title']?>PHP在线加密,云烟PHP在线加密后的PHP代码能保持原有代码的结构、性能,PHP加密无需安装第三方扩展,能够在PHP虚拟主机、VPS、独立服务器上运行。"> <meta name="description" content="<?php echo $conf['title']?>PHP在线加密提供PHP加密,<?php echo $conf['title']?>PHP在线加密后的PHP代码能保持原有代码的结构、性能,PHP加密无需安装第三方扩展,能够在PHP虚拟主机、VPS、独立服务器上运行" /> <meta name="keywords" content="<?php echo $conf['title']?>PHP在线加密提供PHP加密,<?php echo $conf['title']?>PHP在线加密后的PHP代码能保持原有代码的结构、性能,PHP加密无需安装第三方扩展,能够在PHP虚拟主机、VPS、独立服务器上运行" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="format-detection" content="telephone=no"> <meta name="renderer" content="webkit"> <meta http-equiv="Cache-Control" content="no-siteapp"/> <link rel="alternate icon" type="image/png" href="/favicon.png"> <link rel="stylesheet" href="./assets/views/IMJ2V2/css/amazeui.min.css"> <link rel="stylesheet" href="./assets/views/IMJ2V2/css/style.css"> <!--[if lt IE 9]> <script src="http://apps.bdimg.com/libs/html5shiv/3.7/html5shiv.min.js"></script> <script src="http://apps.bdimg.com/libs/respond.js/1.4.2/respond.js"></script> <![endif]--> </head> <body> <header class="m-hd"> <section data-am-sticky class="am-show-md-up"> <div class="am-container"> <a href="./" rel="nofollow" class="m-logo"><i class="am-icon-spinner"></i> <?php echo $conf['title']?></a> <nav> <ul class="m-nav am-nav am-nav-pills am-fr"> <li><a href="index.php" rel="nofollow">网站首页</a></li> <li><a href="https://qm.qq.com/cgi-bin/qm/qr?k=nIhdA-z78FQWvlhO5DNT4MowF2SuSXSN&jump_from=webapi&authKey=Fw6BzBnpBidIzizyeKR4KRPHml07qijsee6FbGFw5EyZG22j0u0611OHW2C7SH6M" rel="nofollow">官方群聊</a></li> <?php ?> </ul> </nav> </section> </div> <nav data-am-widget="header" class="am-header am-show-sm-only"> <h1 class="am-header-title"> <a href="/" rel="nofollow"><?php echo $conf['title']?></a> </h1> <div class="am-header-right am-header-nav"> <a href="#right-link" class="" data-am-offcanvas="{target: '#r-nav'}"> <i class="am-header-icon am-icon-bars"></i> </a> </div> </nav> <div id="r-nav" class="am-offcanvas"> <div class="am-offcanvas-bar am-offcanvas-bar-flip"> <nav class="am-offcanvas-content"> <a href="/" rel="nofollow"><span class="logo"></span></a> <p><i class="am-icon-home"></i> <a href="./index.php" rel="nofollow">网站首页</a></p> <?php ?> </nav> </div> </div> </header> <div data-am-widget="slider" class="am-slider am-slider-i2" data-am-flexslider="{controlNav:false}"> <ul class="am-slides"> <li class="am-slider-images" style="background-image: url(./assets/views/IMJ2V2/images/banner1.jpg)"> <div class="am-container am-slider-desc"> <div class="am-slider-content"> <h2 class="am-slider-title am-animation-slide-left" data-am-scrollspy="{animation: 'slide-left', delay: 100}">憨豆婆的PHP在线加密系统</h2> <p data-am-scrollspy="{animation:'slide-right', delay: 600}" class="am-animation-slide-right">花一分钟创建属于你的账号</p> <a href="./user/" class="am-btn-xs am-btn am-btn-secondary am-radius am-animation-slide-bottom am-animation-delay-1" rel="nofollow" data-am-scrollspy="{animation:'slide-bottom', delay: 100}">开始你的加密历程ba!</a> </div> </div> </li> </ul> </div> <div class="m-services m-home-box"> <section class="am-container"> <hgroup class="am-animation-slide-bottom am-animation-delay-1" data-am-scrollspy="{animation:'slide-bottom', delay: 100}"> <h2>选择我们憨豆婆没有错</h2> <p>大量的理由让您选择我们</p> </hgroup> <ul class="am-avg-sm-2 am-avg-md-6 am-avg-lg-4 am-thumbnails"> <li class="am-animation-slide-top" data-am-scrollspy="{animation:'slide-top', delay: 0}"> <h2>平台功能</h2> <p><?php echo $conf['title']?>PHP在线加密提供PHP加密,<?php echo $conf['title']?>PHP在线加密后的PHP代码能保持原有代码的结构、性能,PHP加密无需安装第三方扩展,能够在PHP虚拟主机、VPS、独立服务器上运行.</p> </li> <li class="am-animation-slide-top" data-am-scrollspy="{animation:'slide-top', delay: 0}"> <h2>平台介绍</h2> <p><?php echo $conf['title']?>PHP在线加密,拥有强大的服务器支持,加密效率高 二十四小时在线监控,秒单处理,抛弃旧平台的繁琐,支持更多功能.</p> </li> <li class="am-animation-slide-top am-animation-delay-1" data-am-scrollspy="{animation:'slide-top', delay: 50}"> <h2>平台优势</h2> <p><?php echo $conf['title']?>PHP在线加密,平台采用的是高防服务器搭建,速度快,稳定性好 我们的站点都是经过各种测试,努力优化,为的是用户更好的体验.</p> </li> <li class="am-animation-slide-top am-animation-delay-1" data-am-scrollspy="{animation:'slide-top', delay: 50}"> <h2>平台特点</h2> <p><?php echo $conf['title']?>PHP在线加密,不会储存任何用户的文件,在线加密后会自动删除,不会存放到我们的服务器,保护文件的泄露,这是我们最大的特点!</p> </li> <li class="am-animation-slide-top am-animation-delay-2" data-am-scrollspy="{animation:'slide-top', delay: 0}"> <h3>安全说明</h3> <p>采用64位算法,进行MD5六次加密,同时进行了再次编码问题,更重要的是我们的数据库安全是进行了绝对的加密保护,不用担心数据泄露问题,确保用户数据安全.</p> </li> <li class="am-animation-slide-top am-animation-delay-2" data-am-scrollspy="{animation:'slide-top', delay: 0}"> <h3>售后耐心</h3> <p>我们拥有最耐心的售后团队,无论您是程序员还是小白客服都可以为您解决任何问题,都是文明第一,不会出现不耐烦等情况.</p> </li> <li class="am-animation-slide-top am-animation-delay-2" data-am-scrollspy="{animation:'slide-top', delay: 50}"> <h3>价格便宜</h3> <p>我们的加密平台加密方式复杂而且价格低廉,一旦达到指定级别会员后就是永久,不会限制时间什么的,是您的不二选择.</p> </li> <li class="am-animation-slide-top am-animation-delay-2" data-am-scrollspy="{animation:'slide-top', delay: 50}"> <h3>解密难度高</h3> <p>解密的难度非常高,不是专业人士解密不了,不信可以试试看,平台同样支持免费解密,一般的还是还是可以的.</p> </li> </ul> </section> </div> <div class="am-container m-home-box"> <hgroup data-am-scrollspy="{animation:'slide-bottom', delay: 100}"> <h2>可以提供的案例展示</h2> <p>不断测试不断提高加密安全,为用户提供安全加密</p> </hgroup> <section class="m-case-list"> <ul class="am-avg-sm-1 am-avg-md-3 am-avg-lg-3 am-thumbnails"> <li data-am-scrollspy="{animation:'slide-bottom', delay: 196}"> <figure class="effect-lily"> <img src="./assets/views/IMJ2V2/images/free.jpg" class="am-img-responsive"> <figcaption> <h3>免费加密测试</h3> <p>不加入什么手段,编码仍是UTF-8</p> </figcaption> </figure> </li> <li data-am-scrollspy="{animation:'slide-bottom', delay: 174}"> <figure class="effect-lily"> <img src="./assets/views/IMJ2V2/images/vip.jpg" class="am-img-responsive"> <figcaption> <h3>VIP加密</h3> <p>版权注释,域名限制等功能,一有尽有</p> </figcaption> </figure> </li> <li data-am-scrollspy="{animation:'slide-bottom', delay: 119}"> <figure class="effect-lily"> <img src="./assets/views/IMJ2V2/images/jie.jpg" class="am-img-responsive"> <figcaption> <h3>VIP解密后</h3> <p>依旧还是乱码,提供安全加密平台</p> </figcaption> </figure> </li> </ul> </section> </div> <hr> <section class="am-container m-home-box m-partner"> <hgroup data-am-scrollspy="{animation:'slide-bottom', delay: 100}"> <h2>协助伙伴</h2> <p>智慧警务数据科学教研室、b站某php up主</p> </hgroup> <ul class="am-avg-lg-3 am-avg-md-6 am-avg-sm-2 am-thumbnails" data-am-scrollspy="{animation:'slide-bottom', delay: 100}"> <li data-am-scrollspy="{animation:'slide-bottom', delay: 44}"> <img src="./assets/views/IMJ2V2/images/tencent.png" alt="腾讯" class="am-img-responsive"></li> <li data-am-scrollspy="{animation:'slide-bottom', delay: 399}"> <img src="./assets/views/IMJ2V2/images/aliyun.png" alt="阿里云" class="am-img-responsive"></li> <li data-am-scrollspy="{animation:'slide-bottom', delay: 286}"> <img src="./assets/views/IMJ2V2/images/canon.png" alt="佳能" class="am-img-responsive"></li> <li data-am-scrollspy="{animation:'slide-bottom', delay: 114}"> <img src="./assets/views/IMJ2V2/images/baidu.png" alt="百度" class="am-img-responsive"></li> <li data-am-scrollspy="{animation:'slide-bottom', delay: 72}"> <img src="./assets/views/IMJ2V2/images/microsoft.png" alt="微软" class="am-img-responsive"></li> <li data-am-scrollspy="{animation:'slide-bottom', delay: 99}"> <img src="./assets/views/IMJ2V2/images/adobe.png" alt="adobe" class="am-img-responsive"></li> </ul> </section> <div class="m-home-box m-contact"> <section class="am-container"> <hgroup data-am-scrollspy="{animation:'slide-bottom', delay: 100}"> <h2>联系我们</h2> <p>你可以通过以下方式和我们取得联系。</p> </hgroup> <ul class="am-avg-lg-2 am-avg-md-2 am-avg-sm-2 am-thumbnails"> <li data-am-scrollspy="{animation:'slide-bottom', delay: 2}"> <i class="am-icon-qq"></i> <?php echo $conf['zzqq']?> </li> <li data-am-scrollspy="{animation:'slide-bottom', delay: 211}"> <i class=""></i> <a target="_blank" href="http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=NwUAAQQODgMOBwN3RkYZVFha" style="text-decoration:none;"><img src="http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_11.png"/></a> </li> </ul> </section> </div> <footer class="m-footer"> <div class="am-container"> <section class="am-g m-footer-container"> <section class="am-u-sm-12 am-u-md-12 am-u-lg-6"> <h2>关于我们</h2> <h3>智慧警务十三队数据安全obe 作者:憨豆婆 组员:唐骏、王庭凯</h3> <p>这是一个php和基础的base64加密系统,有关服务器和传输协议的知识</p> </section> </section> </div> <div class="m-footer-bottom"> <div class="am-container"> <div class="am-g"> <span class="m-u-sm-12 am-u-md-9 am-u-lg-10">Copyright @ 2017 - 2023 <?php echo $conf['title']?> All Rights Reserved . </span> </div> </div> </div> </footer> <!--[if lt IE 9]> <script src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script> <script src="http://cdn.staticfile.org/modernizr/2.8.3/modernizr.js"></script> <script src="./assets/views/IMJ2V2/js/polyfill/rem.min.js"></script> <script src="./assets/views/IMJ2V2/js/polyfill/respond.min.js"></script> <script src="./assets/views/IMJ2V2/js/amazeui.legacy.js"></script> <![endif]--> <!--[if (gte IE 9)|!(IE)]><!--> <script src="./assets/views/IMJ2V2/js/jquery.min.js"></script> <script src="./assets/views/IMJ2V2/js/amazeui.min.js"></script> <!--<![endif]--> <script src='./assets/views/IMJ2V2/js/jquery.qrcode.min.js'></script> </body> <script type="text/javascript" src="/layer/layer.js"></script> <script type="text/javascript"> layer.open({ type: 1 ,title: '系统公告' ,closeBtn: false ,area: '290px;' ,shade: 0.5 ,id: 'LAY_layuipro' //设定一个id,防止重复弹出 ,resize: false ,btn: ['客服', '好的'] ,btnAlign: 'c' ,moveType: 0 //拖拽模式,0或者1 ,content: '<div style="padding: 40px; line-height: 20px; background-color: #393D49; color: #fff; font-weight: 150;"><b><?php echo $conf['modal']?></b></div>' ,success: function(layero){ var btn = layero.find('.layui-layer-btn'); btn.find('.layui-layer-btn0').attr({ href: 'http://wpa.qq.com/msgrd?v=3&uin=<?php echo $conf['kfqq']?>&site=qq&menu=yes' ,target: '_blank' }); } }); </script></span> </html>
网页的后台管理:
可以对用户和会员进行管理,只用会员才可以进行充值才可以进行加密和解密
2、算法原理
Base64 是一种编码算法,用于将二进制数据转换为可打印字符的 ASCII 字符串。它的原理如下:
首先,将待编码的数据分割成每 3 个字节一组(24 位)。
对每一组数据,将其按照 6 位一组进行划分,得到 4 个 6 位的片段。
将这些 6 位的片段转换成对应的索引值。Base64 使用 64 个字符来表示这些索引值,通常使用以下字符集:A-Z、a-z、0-9,以及两个额外的字符 "+" 和 "/"。根据索引值,选择对应的字符。
如果数据的长度不是 3 的倍数,则会在末尾添加额外的字节。根据标准的 Base64 规范,使用 "=" 字符来表示这些额外的字节。将得到的字符片段连接起来,形成最终的 Base64 编码结果。解码时,将 Base64 编码的字符串进行逆操作,将字符片段转换为索引值,然后将索引值组合成原始的二进制数据。
Base64 编码主要用于在文本协议中传输二进制数据,或者将二进制数据嵌入到文本格式中,例如在电子邮件中传输附件或在网页中嵌入图像数据等。由于 Base64 编码后的字符串只包含 ASCII 字符,因此可以通过各种文本传输方式进行可靠传输,而不会出现字符集不兼容等问题。
3、php混淆加密算法演示流程:
1、上传php源文件
2、进行php混淆单个加密
源代码混淆
使用php扩展的代码混淆和无扩展代码混淆比较相似,只不过是把代码还原过程从php代码转到了php扩展。
同样是使用aes des 异或等加密方法直接加密php代码,HOOK翻译php的函数在翻译PHP文件前对文件进行解密操作。这种方案也可以完全还原出源代码。在无其他混淆和压缩时甚至还会保留注释。
3.进行文件的导出
对比前后的加密结果,我们对源代码进行了良好的保护
部分加密算法:
private function _encryptFile($file){ list($enkey, $dekey) = $this->_getKeyPairs(); $baseCodeOfHostedCode = $this->_getBaseCodeOfHostedCode(); $decodeCodeOfHostedCode = $this->_getDecodeCodeOfHostedCode($file, $enkey, $dekey); $hostedCode = $baseCodeOfHostedCode . $decodeCodeOfHostedCode; $regVars = $this->_setVarName($this->_getMatchedVariables($hostedCode)); list($usedFuncs, $funcChars) = $this->_getMatchedFunctions($hostedCode); if(!empty($usedFuncs)){ $_tmp = $this->_setVarName(array('funcStrVar' => ''), $regVars); $funcStrVar = $_tmp['funcStrVar']; $usedFuncMaps = $this->_setVarName($usedFuncs, $regVars); $regVars = array_merge($usedFuncMaps, $regVars); } else { $usedFuncMaps = array(); } //进行base64加密解密 //$prefixCode: define function name & base extra code. $funcVarDefCode = $this->_getFuncVarDefCode($usedFuncMaps, $funcChars, $funcStrVar); $prefixCode = preg_replace("/\r|\n|\s+/is", "", $funcVarDefCode. strtr($baseCodeOfHostedCode, $regVars)); $headers = array_map('trim', array_merge(array('<?php', '/*'), $this->comments, array('*/'))); $hookKey = strtr(md5(implode("\r\n", $headers) . "\r\n" . $prefixCode), $enkey, $dekey); $evalEmbedCode = $this->_getEvalEmbedCode($decodeCodeOfHostedCode, $regVars, $enkey, $dekey); /** * eval(base64_decode( * str_replace("\$hookKey", '', strtr($hookKey.$evalEmbedCode, $dekey, $enkey)) * )); * $unset; */ $unset = 'unset('.$funcStrVar; foreach($regVars as $var){ $unset .= ','.$var; } $unset .= ');'; $evalCode = "@eval(".$regVars["base64_decode"]."(".$regVars["str_replace"]."(".$regVars["\$hookKey"].",'',".$regVars["strtr"]."('".$hookKey.$evalEmbedCode."','".$dekey."','".$enkey."'))));".$unset; $originalEncodedCode = $this->_getPHPEncode($file, $enkey, $dekey); $enCode = implode("\r\n", $headers) . "\r\n" . $prefixCode . $evalCode . "return;?>\r\n" . $originalEncodedCode; $this->_saveEncryptFile($file, $enCode, $enkey, $dekey); } /** * The encoded code needs extra code */ private function _getBaseCodeOfHostedCode(){ $code = <<<EOT \$farrs = file(str_replace('\\\\', '/', __FILE__)); \$enCode = array_pop(\$farrs); \$phpCode = array_pop(\$farrs); \$fstrs = implode('', \$farrs) . substr(\$phpCode, 0, strrpos(\$phpCode, '@ev')); \$hookKey = md5(\$fstrs); \$farrs = \$phpCode = \$fstrs = NULL; EOT; return $code; } /** * The encoded code needs decode code * if the licence is generated, also need to process it. */ private function _getDecodeCodeOfHostedCode($file, $enkey, $dekey){ $code = <<<EOT eval(base64_decode(strtr(\$enCode, '{$dekey}', '{$enkey}'))); \$enCode = NULL; EOT; return $code; } private function _getFuncVarDefCode($usedFuncMaps, $funcChars, $funcStrVar){ //all the chars of function name $funcStr = implode("", $funcChars); //set variable name's value for each variable of function name $funcVarValArr = $this->_getFuncVarvalArr($usedFuncMaps, $funcChars, $funcStrVar); //encoded code define function name string. $code = $funcStrVar."='{$funcStr}';"; foreach($usedFuncMaps as $func => $val){ $code .= $val."= ".$funcVarValArr[$func].";\n"; } return $code; }
- 调用 _getKeyPairs 函数,获取加密和解密密钥的配对,将结果保存在列表中的 $enkey 和 $dekey 变量中。
- 调用 _getBaseCodeOfHostedCode 函数,获取托管代码的基本代码,将结果保存在 $baseCodeOfHostedCode 变量中。
- 调用 _getDecodeCodeOfHostedCode 函数,传入 $file、$enkey 和 $dekey 参数,获取对托管代码进行解密的代码,将结果保存在 $decodeCodeOfHostedCode 变量中。
- 将 $baseCodeOfHostedCode 和 $decodeCodeOfHostedCode 连接起来,得到完整的托管代码,将结果保存在 $hostedCode 变量中。
- 调用 _getMatchedVariables 函数,传入 $hostedCode 参数,获取匹配的变量数组,将结果保存在 $regVars 变量中。该数组表示要在代码中替换的变量及其替换值。
- 调用 _getMatchedFunctions 函数,传入 $hostedCode 参数,获取匹配的函数数组,将结果保存在 $usedFuncs 和 $funcChars 变量中。$usedFuncs 表示匹配的已使用的函数映射,$funcChars 表示函数名的字符组成
private function _getBaseCodeOfHostedCode(){ $code = <<<EOT \$farrs = file(str_replace('\\\\', '/', __FILE__)); \$enCode = array_pop(\$farrs); \$phpCode = array_pop(\$farrs); \$fstrs = implode('', \$farrs) . substr(\$phpCode, 0, strrpos(\$phpCode, '@ev')); \$hookKey = md5(\$fstrs); \$farrs = \$phpCode = \$fstrs = NULL; EOT; return $code; } /** * The encoded code needs decode code * if the licence is generated, also need to process it. */ private function _getDecodeCodeOfHostedCode($file, $enkey, $dekey){ $code = <<<EOT eval(base64_decode(strtr(\$enCode, '{$dekey}', '{$enkey}'))); \$enCode = NULL; EOT; return $code; }
这段代码包括两个私有函数 _getBaseCodeOfHostedCode
和 _getDecodeCodeOfHostedCode
。以下是对这两个函数的解释:
_getBaseCodeOfHostedCode
函数的作用是获取托管代码的基本代码段。
代码解释:
-
- 使用 Heredoc 语法定义了一个包含多行字符串的变量
$code
,其中包含了一段代码。 - 首先,使用
file
函数读取当前文件的内容,并将结果赋值给变量$farrs
,每行代码作为数组的一个元素。 - 使用
array_pop
函数两次,分别将$farrs
数组的最后两个元素弹出并赋值给变量$enCode
和$phpCode
。 - 使用
str_replace
函数将当前文件路径中的反斜杠转换为正斜杠,并将结果作为参数传递给file
函数,读取对应路径的文件内容,并将结果赋值给变量$fstrs
。 - 使用
substr
函数截取$phpCode
字符串中从开头到最后一个@ev
出现的位置之前的部分,并将结果赋值给变量$hookKey
。 - 最后,将变量
$farrs
、$phpCode
和$fstrs
置为NULL
,释放内存占用。 - 返回
$code
变量,即包含了获取托管代码基本信息的代码段。
- 使用 Heredoc 语法定义了一个包含多行字符串的变量
_getDecodeCodeOfHostedCode
函数的作用是获取对托管代码进行解密的代码段。
代码解释:
-
- 同样使用 Heredoc 语法定义了一个包含多行字符串的变量
$code
,其中包含了一段代码。 - 使用
base64_decode
函数对变量$enCode
进行解码,并将结果进行字符串替换,将$dekey
替换为$enkey
,得到解密后的代码。 - 使用
eval
函数执行解密后的代码。 - 最后,将变量
$enCode
置为NULL
,释放内存占用。 - 返回
$code
变量,即包含了对托管代码解密的代码段。
- 同样使用 Heredoc 语法定义了一个包含多行字符串的变量
这两个函数配合使用,可以获取托管代码的基本信息和进行解密操作。
4、base64算法加密解密实现
加密函数
function encode64(input) { input = escape(input); var output = ""; var chr1, chr2, chr3 = ""; var enc1, enc2, enc3, enc4 = ""; var i = 0; do { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); chr1 = chr2 = chr3 = ""; enc1 = enc2 = enc3 = enc4 = ""; } while (i < input.length); return output; }
函数的实现基于一种简单的 Base64 编码算法,它将输入字符串分割成3个字符一组,并将每个字符转换为其对应的 ASCII 值。然后,它将这些 ASCII 值重新组合成4个新的字符,这些新字符使用 Base64 字符集中的字符来表示。
在函数中,变量 input 是待编码的输入字符串。代码首先通过 escape() 函数对输入字符串进行转义处理,然后定义了一些辅助变量和空字符串。
接下来,使用一个 do-while 循环,逐个处理输入字符串的字符。循环内部的逻辑如下:
- 通过 charCodeAt() 函数获取当前字符的 ASCII 值,并分别赋给 chr1、chr2 和 chr3。
- 对 chr1 进行右移2位,得到 enc1,表示新字符的第一个字符。
- 对 chr1 和 chr2 进行一些位运算和移位操作,得到 enc2,表示新字符的第二个字符。
- 对 chr2 和 chr3 进行一些位运算和移位操作,得到 enc3,表示新字符的第三个字符。
- 对 chr3 进行与操作,得到 enc4,表示新字符的第四个字符。
- 检查 chr2 和 chr3 是否为 NaN(Not a Number),如果是,则将 enc3 和 enc4 的值设为 64,用于表示编码结束。
- 将经过 Base64 编码后的4个字符依次添加到 output 字符串中。
- 清空各个变量的值,为下一组字符的处理做准备。
- 循环直到处理完输入字符串的所有字符。
解密函数
function decode64(input) { var output = ""; var chr1, chr2, chr3 = ""; var enc1, enc2, enc3, enc4 = ""; var i = 0; // remove all characters that are not A-Z, a-z, 0-9, +, /, or = var base64test = /[^A-Za-z0-9\+\/\=]/g; if (base64test.exec(input)) { alert("There were invalid base64 characters in the input text.\n" + "Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='\n" + "Expect errors in decoding."); } input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); do { enc1 = keyStr.indexOf(input.charAt(i++)); enc2 = keyStr.indexOf(input.charAt(i++)); enc3 = keyStr.indexOf(input.charAt(i++)); enc4 = keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } chr1 = chr2 = chr3 = ""; enc1 = enc2 = enc3 = enc4 = ""; } while (i < input.length); return unescape(output); }
5、网站的反扒机制
浏览器不支持COOKIE或者不正常访问,并且会自动处理Cookie的发送和接收。Cookie是一种用于在浏览器和Web服务器之间传递信息的机制,用于存储和检索特定网站的用户数据,已启用Cookie功能,并且没有特殊的配置或插件阻止了Cookie的发送和接收。
网站设置了限制异常ip,判断useragernt来实现异常网络请求限制,通过分析User-Agent标头,网站可以检测到一些异常情况,例如恶意爬虫、自动化脚本或伪造请求等。如果网站检测到异常的User-Agent或者无法识别的User-Agent,它可以采取一些措施来限制或拒绝该请求,例如要求进行验证码验证、暂时封禁IP地址
6、登录和注册验证机制
网站提供了图形验证码注册界面,避免异常用户用模拟登录爬取网站,用于防止异常用户使用模拟登录方式对网站进行爬取或其他恶意行为。图形验证码要求用户在注册过程中识别和输入显示的图形验证码,以证明其为真实人类用户,而非自动化脚本或机器人。通过引入图形验证码,可以有效地防止大规模的自动化注册和恶意爬取行为,因为自动化脚本通常很难自动识别和解析图形验证码。可以定时刷新验证码。
可以对后台的异常用户进行管理和删除,避免异常用户的登录,于严重的异常用户,后台系统可以采取进一步的措施,如封禁其账户或彻底删除其账户。这样可以阻止其再次登录并保护系统安全
三、本软件的优点与不足
优点:
- PHP在线加密,平台采用的是高防服务器搭建,速度快,稳定性好 我们的站点都是经过各种测试,努力优化,为的是用户更好的体验
- PHP在线加密,不会储存任何用户的文件,在线加密后会自动删除,不会存放到我们的服务器,保护文件的泄露,这是我们最大的特点!
- 采用64位算法,进行MD5六次加密,同时进行了再次编码问题,更重要的是我们的数据库安全是进行了绝对的加密保护,不用担心数据泄露问题,确保用户数据安全.
不足:
- 依赖第三方算法的安全性:由于时间有限,系统的安全性将取决于这些算法的实施质量和漏洞披露。如果算法存在安全漏洞或被恶意使用者发现,系统的安全性可能会受到威胁、网站可能受到ddos和sql注入的攻击,需要进一步晚上网站的安全性、和对网站进行维护。
- 受限的算法选择:系统可能只支持有限的加密解密算法,进行单一的满足客户php加密的眼球。这可能限制了用户在特定场景下选择最适合的加密算法的能力,需要进一步晚上成为一个完整的加密系统。