答案:1.版权声明
本文是关于如何通过序列号来加载加密的class文件的阐述。本文所提及的Resin hessian是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(Pretty Good Privacy)或GPG(GNU Privacy Guard)。这时,最终用户在运行应用之前必须先进行解密。但解密之后,最终用户就有了一份不加密的类文件,这和事先不进行加密没有什么差别。(3)加密类文件,在运行中JVM用定制的类装载器(Class Loader)解密类文件。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. 基本设计思想
这个过程可以划分成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:> encryption –encrypto myClass.class上一个:好的JAVA风格(英译)
下一个:获得汉字拼音首字母的java工具类更多图片编程知识:
- 更多JSP疑问解答:
- jsp新手求指导,不要笑!
- 如何让一个form提取的值传递给多个jsp?
- DW中,新建的html页面能否有jsp或php代码?
- jsp 如何限制表单,实现只能填写特定的数据。
- jsp 和javabean结合的程序有问题
- 从数据库里取出的数据如何传递到另外的jsp页面中
- 你好,ext嵌入那个jsp页面,是不是还需要加上一些插件啊,不太懂,麻烦你了。
- JSP不能处理所有问题吗?还要来一大堆的TLD,TAG,XML。为JSP 非要 Servlet 不可吗?
- 光标离开时全角转半角在jsp中怎么实现
- jsp 页面 打开 pdf 文件 控制大小 和 工具栏 能发份源码么 谢啦
- jsp页面点保存按钮,运行缓慢,弹出对话框提示
- jsp刷新页面如何不闪屏
- jsp 与html 的交互问题?
- jsp小数显示问题 例如 我在oracle 数据库中查询出来的是 0.01 但是在jsp页面上就显示成 .01 没有前面的0
- jsp中日历控件
- asp
- php
- Delphi
- Matlab
- JSP
- Foxpro
- JS
- C/C++
- C#/ASP.NET
- VC++
- JAVA
- VB
- 汇编语言
- html/css
- CGI
- XML/UML
- wap
- 网站相关
- 网页素材
- python
- 微信小程序
- thinkphp
如果你遇到编程学习难题:
访问www.zzzyk.com 试试CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,