程序员都必要把握哪些信息加密解密办法
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> 信息加密是每一位程序员在学习软件<span style="color: black;">研发</span>技术的时候都会接触到的一个编程技术,下面<span style="color: black;">咱们</span>就<span style="color: black;">一块</span>来<span style="color: black;">认识</span>一下,程序员都<span style="color: black;">必须</span><span style="color: black;">把握</span><span style="color: black;">那些</span>信息加密解密<span style="color: black;">办法</span>。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> 1、加密的本质</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">本质上程序在运行时都是在执行<span style="color: black;">设备</span>码,而基于虚拟机的语言的加密<span style="color: black;">一般</span><span style="color: black;">亦</span>是加密到这个级别,<span style="color: black;">亦</span><span style="color: black;">便是</span>说PHP加密后的程序在执行之前都会解密成opcode来执行。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> PHP在执行之前有一个编译的环节,编译的结果是opcode,<span style="color: black;">而后</span>由Zend虚拟机执行,从<span style="color: black;">这儿</span>看<span style="color: black;">倘若</span>只要将源代码加密,<span style="color: black;">而后</span>在执行之前将代码解密<span style="color: black;">就可</span>。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">从<span style="color: black;">这儿</span>看,只要代码能被解密为opcode,<span style="color: black;">那样</span>总有可能反编译出<span style="color: black;">源自</span>代码,其他的语言中<span style="color: black;">亦</span>是类似,<span style="color: black;">例如</span>objdump程序能将二进制程序反汇编出来,.NET、Java的程序<span style="color: black;">亦</span>是<span style="color: black;">同样</span>,都有<span style="color: black;">有些</span>反编译的程序,<span style="color: black;">不外</span><span style="color: black;">一般</span>这些厂商<span style="color: black;">同期</span>还会附带代码混淆的<span style="color: black;">工具</span>,经过混淆的代码可读性极差,<span style="color: black;">非常多</span>人都留意过Gmail等网站经过混淆的JS代码吧,<span style="color: black;">她们</span>阅读起来非常困难,经过混淆的代码即使反编译出来,读者<span style="color: black;">亦</span>很难<span style="color: black;">经过</span>代码分析出代码中的<span style="color: black;">规律</span>,<span style="color: black;">这般</span><span style="color: black;">亦</span>就<span style="color: black;">极重</span>的<span style="color: black;">增多</span>了应用的安全性。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> 2、加密</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">前面<span style="color: black;">说到</span>加密的目的<span style="color: black;">便是</span>为了防止轻易获取程序源码的一种手段,<span style="color: black;">针对</span>PHP<span style="color: black;">来讲</span>,将源码编译为opcode<span style="color: black;">已然</span>能达到目的了,<span style="color: black;">由于</span>PHP引擎终都是<span style="color: black;">必须</span>执行opcode的。虽然<span style="color: black;">能够</span>将加密进一步,<span style="color: black;">然则</span><span style="color: black;">倘若</span><span style="color: black;">必须</span>修改Zend引擎,<span style="color: black;">那样</span>成本就有点大了,<span style="color: black;">由于</span><span style="color: black;">必须</span>修改Zend引擎了,而这是<span style="color: black;">没</span>法<span style="color: black;">经过</span>简单的扩展机制来实现了,<span style="color: black;">因此</span>解密的成本<span style="color: black;">亦</span>会变的太大,<span style="color: black;">亦</span>就<span style="color: black;">无</span><span style="color: black;">实质</span><span style="color: black;">道理</span>了。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">熟悉PHP的<span style="color: black;">朋友</span>可能会<span style="color: black;">发掘</span>,这种加密方式和opcode缓存本质上<span style="color: black;">无</span>太大差别,opcode缓存的工作是将源码编译为opcode<span style="color: black;">而后</span>缓存起来,在执行的时候绕过编译直接执行opcode,的确是没错的。<span style="color: black;">这儿</span>的区别是:opcode缓存是动态透明的,而加密后<span style="color: black;">咱们</span>要做的是分发加密后的代码。这么说<span style="color: black;">咱们</span>是不是<span style="color: black;">能够</span>直接将APC之类的缓存扩展进行改造就<span style="color: black;">能够</span>了,其实理论上是<span style="color: black;">能够</span>的。<span style="color: black;">不外</span>这两者的定位还是有差别的:加密的目的是为了减少源码被分析破解的可能,而缓存只是为了<span style="color: black;">加强</span>程序运行的速度。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"> 3、解密</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">本例中的代码其实并<span style="color: black;">无</span>进行加密,相对源代码<span style="color: black;">来讲</span>,opcode编译本身<span style="color: black;">亦</span><span style="color: black;">能够</span>算做一种加密了,<span style="color: black;">由于</span>毕竟<span style="color: black;">经过</span>阅读opcode来理解程序的<span style="color: black;">规律</span>还是比较困难的。</p>
回顾历史,我们感慨万千;放眼未来,我们信心百倍。
页:
[1]