JAVA网页编程之Java加密和licence把持的计划
ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。加密|把持|计划1.版权声明本文是关于怎样经由过程序列号来加载加密的class文件的论述。本文所说起的Resinhessian是Caucho公司的注册产物称号,其版权规caucho一切。本文能够转载,可是必需说明作者的Blog地点:http://blog.csdn.net/oldjavaman2.本文的合用对象
作为手艺职员,本文的手艺细节触及到Java言语的基本常识,您在浏览前应当懂得Java静态装载Class的机制,和惯例的Java加密的相干常识,同时本文假定您已具有开辟web的基础才能,懂得jsp和servlet的运作历程。3.如何浏览
你能够鄙人面地点下载到本文所用到的Jar文件和加密工具http://www.collegesoft.com.cn/download/licenceClient_1.0.3.jar加密工具的下载:http://www.collegesoft.com.cn/download/encryption.exe关于序列号的天生部分,鉴于回护公司产物的思索就不再公然公布了,有乐趣的同仁能够用mail和我交换。4.概述
4.1.加密Java源码的缘故原由
Java源代码经由编译今后在JVM中实行。因为JVM界面是完整通明的,Java类文件可以很简单经由过程反编译重视新转换成源代码。因而,一切的算法、类文件等都能够以源代码的情势被公然,使得软件不克不及遭到回护,为了回护产权,一样平常能够有以下几种办法: (1)"含混"类文件,把文件的称号和办法换成000OOoo的体例,固然只需你有充足的耐烦,将这些编码转换成本人能够看懂的代码,并不是难事。 (2)盛行的加密工具对源文件举行加密,好比PGP(PrettyGoodPrivacy)或GPG(GNUPrivacyGuard)。这时候,终极用户在运转使用之前必需先辈行解密。但解密以后,终极用户就有了一份不加密的类文件,这和事前不举行加密没有甚么不同。 (3)加密类文件,在运转中JVM用定制的类装载器(ClassLoader)解密类文件。Java运转古装进字节码的机制隐含地意味着能够对字节码举行修正。JVM每次装进类文件时都必要一个称为ClassLoader的对象,这个对象卖力把新的类装进正在运转的JVM。JVM给ClassLoader一个包括了待装进类(比方java.lang.Object)名字的字符串,然后由ClassLoader卖力找到类文件,装进原始数据,并把它转换成一个Class对象。 用户下载的是加密过的类文件,在加密类文件装进之时举行解密,因而能够当作是一种立即解密器。因为解密后的字节码文件永久不会保留到文件体系,以是保密者很可贵到解密后的代码。 因为把原始字节码转换成Class对象的历程完整由体系卖力,以是创立定制ClassLoader对象实在其实不坚苦,只需先取得原始数据,接着就能够举行包括解密在内的任何转换。4.2.Java暗码系统和Java暗码扩大
Java暗码系统(JCA)和Java暗码扩大(JCE)的计划目标是为Java供应与完成有关的加密函数API。它们都用factory办法来创立类的例程,然后把实践的加密函数托付给供应者指定的底层引擎,引擎中为类供应了服务供应者接口在Java中完成数据的加密/解密,是利用其内置的JCE(Java加密扩大)来完成的。Java暗码系统布局撑持供给商的互操纵,同时撑持硬件和软件完成。4.3.本文彩用的体例
我们接纳的是第三种体例,将class文件加密作为产物的刊行版本,可是为了让这个加密的体例能够在分歧的项目内里利用,又将这个解密的处置做成webservice的体例来举行.5.基础计划头脑
http://www.alixixi.com/uploadpic/2007-2/200728164423332.gif
这个历程能够分别成5个部分:
1)将加密的class文件传送到webService内里.2)由webService来检察Licence是内里,是不是有正当的信息,比如产物称号,版本,受权用户,已过时工夫等,有此决意是不是持续实行第3个步骤3)假如统统考证经由过程,将由webService前往一个解密的文件4)由当地的webService来装载这个class对象,5)机关成一个class的instance6.谁人文件应当被加密
在之前,实验将本人的API举行加密,可是作为API自己在公司外部刊行,这就请求我们每一个programmer在编写代码的时分必需人手一个Licence才能够举行一般的事情,为API的晋级和保护也带来极年夜的方便,为何?由于API不克不及作为一个Jar公布,只能以class的体例来公布.那末.我们应当加密的是甚么呢?在我们计划web程序的时分,一样平常的流程是,login然后在session或cookie内里纪录他的身份信息,比如她是一个甚么样的用户,是先生大概教员仍是办理员,同时,我们要纪录他具有甚么权限,每一个权限的操纵局限又是甚么?那末这个历程我们一样平常在用户上岸,和数据库毗连以后来举行的,这是一个庞大的逻辑操纵历程,,加密这个办法是一个好的设法,如许歹意的用户,即便把一切的其他class文件用jad来复原,也杯水车薪,除非他能够猜出你在login的时分究竟做了甚么。7.如何加密本人的java文件
7.2.文件的加密
加密我们的文件,我们接纳的是JCE的算法来举行的,详细的加密完成,我再次不再叙说,在google内里,你能够猎取n多的文章在形貌这个JCE的用法,关于我们的文件,已供应了一个windows的exe程序来之行,这个文件叫做encryption.exe你能够用以下命令来加密本人的文件c:>encryptionCencryptomyClass.class
如许就能够把你的文件做成Jad等工具没法反编译的文件了。
8.从LicenceCenter猎取的产物信息
不管再增加课程仍是,创建新的用户的时分,您都大概会有一个需求,我怎样晓得本人的产物受权给这个用户甚么样的信息呢,是不是同意他再创建一个课程大概增加一个客户?我们供应的jar内里能够办理你的狐疑:代码以下LicenceFactorylicenceFactory=newLicenceFactory();licenceFactory.getLicence("urProductName");
假如这个产物在考证中央没有注册序列号,将前往null;9.程序必要增添甚么设置
在licenceClient内里,体系必要读取licenceCenter的地点,在您的web使用公布的时分,必需将webService的地点编写成情况变量,在web.xml内里增添一段代码:<env-entry><env-entry-name>licence_service_url</env-entry-name><env-entry-value>http://192.168.2.212:8080/licenceCenter/LicenceService</env-entry-value><env-entry-type>java.lang.String</env-entry-type></env-entry>
你能够将白色的部分放在你的webserver上会见,假定看到以下界面,暗示考证中央已安装乐成10.关于考证中央的安装
考证中央的安装文件为licenceService1.0.1.zip在你的操纵体系内里解压在一个目次中。在你的Javawebserver内里设置一个使用,比如叫做:licenceCenter以Resin为例子:在httpd.conf内里加上一下代码:<web-appid="demo"app-dir="E:/licencescenter/webapp"><servlet-mappingurl-pattern=*.jspservlet-name=com.caucho.jsp.JspServlet/></web-app>
个中在你的这个使用中的web.xml文件必需包括<servletservlet-name="LicenceService"servlet-class="com.caucho.hessian.server.HessianServlet"><init-paramservice-class="com.collegesoft.licence.LicenceService"/><init-paramapi-class="com.collegesoft.licence.LicenceServiceStub"/></servlet><servlet-mappingurl-pattern="/LicenceService"servlet-name="LicenceService"/>
11.罕见成绩
Q:为何不间接在webService内里加载好一个Class,而是要在客户端来用classLoader来装载?A:良多的程序员问过我这个成绩,实在很复杂,你假如晓得classloader的机制,就晓得假定你扩大login的实例用到你的别的一个对象,比如OnlineUser,那末要在webService内里来装载你的类,我就必需具有你这个类,可是webservice内里是不晓得你将来是要用到甚么类的。Q:为何在redhat9上,会见考证中央会呈现中文乱码成绩?A:是因为redhat9的默许字符集不为GBK的原因。一样平常接纳将命令exportLANG=zh_CN.GBK加在resin服务启动文件中。
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,netbeans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 是一种为 Internet发展的计算机语言 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! Java 编程语言的风格十分接近C、C++语言。
页:
[1]