免费OA论坛JAVA加密金盾JAVA加密Java加密和licence控制的设计--加密OA办公系统
    
 
Java加密和licence控制的设计--加密OA办公系统
发起人:admin  回复数:2  浏览数:41770  最后更新:2009/4/30 8:59:43 by admin

选择查看 搜索更多相关主题  帖子排序:
2009/3/4 8:36:41
admin





营长

角  色:管理员
发 帖 数:530
经 验 值:866
注册时间:2006/1/25
Java加密和licence控制的设计--加密OA办公系统
加密OA办公系统方法很多,下面提到的就是其中一种。

1.版权声明

<div>    本文是关于如何通过序列号来加载加密的class文件的阐述。</div><div>   本文所提及的Resin hessian是Caucho公司的注册产品名称, 其版权规caucho所有。</div><div>本文可以转载, 但是必须注明作者的Blog地址:</div><div>http://blog.csdn.net/oldjavaman</div>

2. 本文的适用对象

<div>    作为技术人员,本文的技术细节涉及到Java语言的基础知识, 您在阅读前应该了解Java动态装载Class的机制,以及常规的Java加密的相关知识, 同时本文假定您已经具有开发web的基本能力, 了解jsp和servlet的运作过程。</div>

3.怎样阅读

<div>你可以在下面地址下载到本文所用到的Jar文件和加密工具</div><div>http://www.collegesoft.com.cn/download/licenceClient_1.0.3.jar</div><div>加密工具的下载:</div><div>http://www.collegesoft.com.cn/download/encryption.exe</div><div>关于序列号的生成部分, 鉴于保护公司产品的考虑就不再公开发布了, 有兴趣的同仁可以用mail和我交流。</div><div> </div><div> </div>

4. 概述

4.1. 加密Java源码的原因

<div>  Java源代码经过编译以后在JVM中执行。由于JVM界面是完全透明的,Java类文件能够很容易通过反编译器重新转换成源代码。因此,所有的算法、类文件等都可以以源代码的形式被公开,使得软件不能受到保护,为了保护产权,一般可以有以下几种方法:</div><div> </div><div>  (1)"模糊"类文件,把文件的名称和方法换成000OOoo的方式,当然只要你有足够的耐心, 将这些编码转换成自己可以看懂的代码, 并非难事。</div><div> </div><div>  (2)流行的加密工具对源文件进行加密,比如PGP(Pretty Good Privacy)或GPG(GNU Privacy Guard)。这时,最终用户在运行应用之前必须先进行解密。但解密之后,最终用户就有了一份不加密的类文件,这和事先不进行加密没有什么差别。</div><div> </div><div>  (3)加密类文件,在运行中JVM用定制的类装载器(Class Loader)解密类文件。Java运行时装入字节码的机制隐含地意味着可以对字节码进行修改。JVM每次装入类文件时都需要一个称为ClassLoader的对象,这个对象负责把新的类装入正在运行的JVM。JVM给ClassLoader一个包含了待装入类(例如java.lang.Object)名字的字符串,然后由ClassLoader负责找到类文件,装入原始数据,并把它转换成一个Class对象。</div><div> </div><div>  用户下载的是加密过的类文件,在加密类文件装入之时进行解密,因此可以看成是一种即时解密器。由于解密后的字节码文件永远不会保存到文件系统,所以窃密者很难得到解密后的代码。 </div><div> </div><div>  由于把原始字节码转换成Class对象的过程完全由系统负责,所以创建定制ClassLoader对象其实并不困难,只需先获得原始数据,接着就可以进行包含解密在内的任何转换。</div><div> </div>

4.2. Java密码体系和Java密码扩展

<div> </div><div>  Java密码体系(JCA)和Java密码扩展(JCE)的设计目的是为Java提供与实现无关的加密函数API。它们都用factory方法来创建类的例程,然后把实际的加密函数委托给提供者指定的底层引擎,引擎中为类提供了服务提供者接口在Java中实现数据的加密/解密,是使用其内置的JCE(Java加密扩展)来实现的。Java密码体系结构支持供应商的互操作,同时支持硬件和软件实现。</div>

4.3. 本文采用的方式

<div>我们采用的是第三种方式, 将class文件加密作为产品的发行版本,但是为了让这个加密的方式可以在不同的项目里面使用, 又将这个解密的处理做成webservice的方式来进行.</div>

5. 基本设计思想

这个过程可以划分成5个部分:

<div>1)      将加密的class文件传递到webService里面.</div><div>2)      由webService来查看Licence是里面, 是否有合法的信息, 譬如产品名称, 版本, 授权用户,已经过期时间等, 有此决定是否继续执行第3个步骤</div><div>3)      如果一切验证通过, 将由webService返回一个解密的文件</div><div>4)      由本地的webService来装载这个class对象, </div><div>5)      构造成一个class的instance</div><div> </div><div> </div><div> </div>

6.那个文件应该被加密

<div>   在以前, 尝试将自己的API进行加密, 但是作为API本身在公司内部发行, 这就要求我们每个programmer在编写代码的时候必须人手一个Licence才可以进行正常的工作, 为API的升级和维护也带来极大的不便, 为什么? 因为API不能作为一个Jar发布, 只能以class的方式来发布.</div><div>   那么. 我们应该加密的是什么呢? 在我们设计web程序的时候, 一般的流程是, login 然后在session或cookie里面记录他的身份信息, 譬如她是一个什么样的用户, 是学生或者教师还是管理员, 同时, 我们要记录他具有什么权限, 每个权限的操作范围又是什么? 那么这个过程我们一般在用户登陆, 和数据库连接之后来进行的, 这是一个复杂的逻辑操作过程,, 加密这个方法是一个好的想法, 这样恶意的用户, 即使把所有的其他class文件用jad来还原, 也无济于事, 除非他可以猜出你在login的时候到底做了什么。</div><div> </div>

7. 怎样加密自己的java文件

7.2.  文件的加密

<div>   加密我们的文件, 我们采用的是JCE的算法来进行的, 具体的加密实现, 我再次不再叙述, 在google里面, 你可以获取n多的文章在描述这个JCE的用法, 对于我们的文件, 已经提供了一个windows的exe程序来之行,这个文件叫做encryption.exe</div><div>你可以用如下命令来加密自己的文件</div>

<div>c:> encryption –encrypto myClass.class </div>

<div> </div><div>这样就可以把你的文件做成Jad等工具无法反编译的文件了。</div><div> </div>

8. 从LicenceCenter获取的产品信息

<div>无论再添加课程还是, 建立新的用户的时候, 您都可能会有一个需求, 我怎么知道自己的产品授权给这个用户什么样的信息呢, 是否允许他再建立一个课程或者添加一个客户?</div><div> </div><div>我们提供的jar里面可以解决你的困惑:</div><div>代码如下</div><div> </div>

<div>LicenceFactory licenceFactory=new LicenceFactory();</div><div>        licenceFactory.getLicence("urProductName");</div><div> </div>

<div>如果这个产品在验证中心没有注册序列号, 将返回null;</div><div> </div>

9.程序需要增加什么配置

<div>在licenceClient里面, 系统需要读取licenceCenter的地址, 在您的web应用发布的时候, 必须将webService的地址编写成环境变量, 在web.xml里面增加一段代码:</div>

<div><env-entry></div><div>              <env-entry-name>licence_service_url</env-entry-name></div><div>                    <env-entry-value>http://192.168.2.212:8080/licenceCenter/LicenceService</env-entry-value></div><div>              <env-entry-type>java.lang.String</env-entry-type></div><div>       </env-entry></div>

<div> </div><div>你可以将红色的部分放在你的web server上访问, 假设看到如下界面, 表示验证中心已经安装成功</div><div></div>

10.关于验证中心的安装

<div>验证中心的安装文件为 licenceService1.0.1.zip</div><div>在你的操作系统里面解压在一个目录中。</div><div>在你的Java web server里面配置一个应用, 譬如叫做:licenceCenter</div><div>以Resin为例子:在httpd.conf里面加上一下代码:</div>

<div><web-app id="demo" app-dir="E:/licencescenter/webapp"></div><div>                            <servlet-mapping url-pattern='*.jsp'</div><div>                                   servlet-name='com.caucho.jsp.JspServlet'/>        </div><div> </div><div></web-app></div>

<div> </div><div>其中在你的这个应用中的web.xml文件必须包含</div>

<div align=left><servlet servlet-name="LicenceService"      servlet-class="com.caucho.hessian.server.HessianServlet"></div><div align=left>    <init-param service-class="com.collegesoft.licence.LicenceService"/></div><div align=left>    <init-param api-class="com.collegesoft.licence.LicenceServiceStub"/></div><div align=left>  </servlet></div><div align=left>  <servlet-mapping url-pattern="/LicenceService" servlet-name="LicenceService"/></div>

<div></div><div> </div>

11. 常见问题

<div>Q: 为什么不直接在webService里面加载好一个Class, 而是要在客户端来用classLoader来装载?</div><div>A: 很多的程序员问过我这个问题,其实很简单, 你如果知道classloader的机制, 就知道假设你扩展login的实例用到你的另外一个对象, 譬如OnlineUser, 那么要在webService里面来装载你的类, 我就必须拥有你这个类, 但是webservice里面是不知道你未来是要用到什么类的。</div><div>Q:为什么在redhat9上,访问验证中心会出现中文乱码问题?</div><div>A:是由于redhat9的默认字符集不为GBK的缘故。一般采用将命令export LANG=zh_CN.GBK加在resin服务启动文件中。</div><div> </div>

13.关于作者

<div>OldJavaMan, 是一个Java的狂热分子, 喜欢OpenSouce的东西, 无奈自己还要靠这个东西养家, 无法实现开源的做法, 期望有一天可以衣食无忧地编写自己喜欢地程序, 并从中获取自己的人生乐趣。</div>
OA办公系统改变传统办公模式。
快乐工作,快乐生活!
QQ:769493449 MSN:shihan1688@sina.com

[admin 于 2012-12-23 9:19:51 编辑过]

2009/3/24 11:35:29
ijava





工兵

角  色:注册用户
发 帖 数:2
经 验 值:2
注册时间:2009/3/24
这种方法似乎效果有限,licenseclient.jar 很容易被破解.

2009/4/30 8:59:43
admin





营长

角  色:管理员
发 帖 数:530
经 验 值:866
注册时间:2006/1/25
JAVA加密方法很多,此处是转帖给大家分享,您可以看看JAVA加密金盾,破解的难度是否加大了。
OA办公系统改变传统办公模式。
快乐工作,快乐生活!
QQ:769493449 MSN:shihan1688@sina.com


  • 联系我们 -Email:shihhan1688@sina.com QQ:1812143094 Tel:15919870037 网络传真 OA交流群:72840413 - hitai - 论坛存档 - 返回顶部
    Powered by HITAI 2008 ACCESS © 2003-2024 hitai.com
  • 页面执行时间 0.19 秒
    服务器时间2024/5/3 15:39:40