
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
信息加密是每一位程序员在学习软件开发技术的时候都会接触到的一个编程技术,下面我们就一起来了解一下,程序员都需要掌握哪些信息加密解密方法。
1、加密的本质
本质上程序在运行时都是在执行机器码,而基于虚拟机的语言的加密通常也是加密到这个级别,也就是说PHP加密后的程序在执行之前都会解密成opcode来执行。
PHP在执行之前有一个编译的环节,编译的结果是opcode,然后由Zend虚拟机执行,从这里看如果只要将源代码加密,然后在执行之前将代码解密即可。
从这里看,只要代码能被解密为opcode,那么总有可能反编译出来源代码,其他的语言中也是类似,比如objdump程序能将二进制程序反汇编出来,.NET、Java的程序也是一样,都有一些反编译的程序,不过通常这些厂商同时还会附带代码混淆的工具,经过混淆的代码可读性极差,很多人都留意过Gmail等网站经过混淆的JS代码吧,他们阅读起来非常困难,经过混淆的代码即使反编译出来,读者也很难通过代码分析出代码中的逻辑,这样也就极大的增加了应用的安全性。
2、加密
前面提到加密的目的就是为了防止轻易获取程序源码的一种手段,对于PHP来说,将源码编译为opcode已经能达到目的了,因为PHP引擎终都是需要执行opcode的。虽然可以将加密进一步,但是如果需要修改Zend引擎,那么成本就有点大了,因为需要修改Zend引擎了,而这是无法通过简单的扩展机制来实现了,所以解密的成本也会变的太大,也就没有实际意义了。
熟悉PHP的同学可能会发现,这种加密方式和opcode缓存本质上没有太大差别,opcode缓存的工作是将源码编译为opcode然后缓存起来,在执行的时候绕过编译直接执行opcode,的确是没错的。这里的区别是:opcode缓存是动态透明的,而加密后我们要做的是分发加密后的代码。这么说我们是不是可以直接将APC之类的缓存扩展进行改造就可以了,其实理论上是可以的。不过这两者的定位还是有差别的:加密的目的是为了减少源码被分析破解的可能,而缓存只是为了提高程序运行的速度。
3、解密
本例中的代码其实并没有进行加密,相对源代码来说,opcode编译本身也可以算做一种加密了,因为毕竟通过阅读opcode来理解程序的逻辑还是比较困难的。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。