??xml version="1.0" encoding="utf-8" standalone="yes"?>
??/strong>Q本文首先分析了Java源代码需要加密的原因Q简要介l了DES法及Java密码体系和Java密码扩展Q最后说明了利用DES加密法保护Java源代码的Ҏ及步骤?br />
关键?/strong> Java 加密 DES法
Java语言是一U非帔R用?a class="bluekey" target="_blank">|络~程的语aQ它的基本结构与C++极ؓ怼Q但抛弃?a class="bluekey" target="_blank">C/C++中指针等内容Q同时它吸收了Smalltalk、C++面向对象的编E思想。它h单性、鲁性、可UL性、动态性等特点。这些特点得Java成ؓ跨^台应用开发的一U规范,在世界范围内q泛传?br />
加密Java源码的原?/strong>
Java源代码经q编译以后在JVM中执行。由于JVM界面是完全透明的,Javac?/font>文g能够很容易通过反编?/font>器重新{换成源代码。因此,所有的法、类文g{都可以以源代码的Ş式被公开Q得Y件不能受C护,Z保护产权Q一般可以有以下几种ҎQ?br />
Q?Q?模糊"cLӞ加大?a class="bluekey" target="_blank">~译?/font>反编译源代码文g的难度。然而,可以修改反编译器Q之能够处理这些模p类文g。所以仅仅依?模糊cL?来保证代码的安全是不够的?br />
Q?Q流行的加密工具?a class="bluekey" target="_blank">源文?/font>q行加密Q比?a class="bluekey" target="_blank">PGPQ?a class="bluekey" target="_blank">Pretty Good PrivacyQ或GPGQ?a class="bluekey" target="_blank">GNU Privacy GuardQ。这Ӟ最l用户在q行应用之前必须先进?a class="bluekey" target="_blank">解密。但解密之后Q最l用户就有了一份不加密的类文gQ这和事先不q行加密没有什么差别?br />
Q?Q加密类文gQ在q行中JVM用定制的c装载器QClass LoaderQ解密类文g。Javaq行时装入字节码的机刉含地意味着可以对字节码q行修改。JVM每次装入cL件时都需要一个称为ClassLoader的对象,q个对象负责把新的类装入正在q行的JVM。JVMlClassLoader一个包含了待装入类Q例如java.lang.ObjectQ名字的字符Ԍ然后由ClassLoader负责扑ֈcLӞ装入原始数据Qƈ把它转换成一个Class对象?br />
用户下蝲的是加密q的cLӞ在加密类文g装入之时q行解密Q因此可以看成是一U即时解密器。由于解密后的字节码文g永远不会保存?a class="bluekey" target="_blank">文gpȝQ所?a class="bluekey" target="_blank">H密者很隑־到解密后的代码?
׃把原始字节码转换成Class对象的过E完全由pȝ负责Q所以创建定制ClassLoader对象其实q不困难Q只需先获得原始数据,接着可以进行包含解密在内的M转换?br />
Java密码体系和Java密码扩展
Java密码体系(JCA)和Java密码扩展(JCE)的设计目的是为Java提供与实现无关的加密函数API。它们都用factoryҎ来创建类的例E,然后把实际的加密函数委托l提供者指定的底层引擎,引擎中ؓcL供了服务提供者接口在Java中实现数据的加密/解密Q是使用其内|的JCE(Java加密扩展)来实现的?a class="bluekey" target="_blank">Java开?/font>工具?.1为实现包?a class="bluekey" target="_blank">数字{和信息摘要在内的加密功能Q推Z一U基于供应商的新型灵zd用编E接口。Java密码体系l构支持供应商的互操?同时支持g和Y件实现?br />
Java密码?a class="bluekey" target="_blank">l构设计遵@两个原则:
(1)法的独立性和可靠性?br />
(2)实现的独立性和怺作用性?br />
法的独立性是通过定义密码服务cL获得。用户只需了解密码法的概?而不用去兛_如何实现q些概念。实现的独立性和怺作用性通过密码服务提供器来实现。密码服务提供器是实C个或多个密码服务的一个或多个E序包。Y件开发商Ҏ一定接?各U算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供?可将包含提供器的ZIP?a class="bluekey" target="_blank">JAR文g攑֜CLASSPATH?再编辑Java安全属性文件来讄定义一个提供器。Javaq行环境Sun版本? 提供一个缺省的提供器Sun?br />
下面介绍DES法及如何利用DES法加密和解?/font>cL件的步骤?br />
DES法?/strong>
DESQ?a class="bluekey" target="_blank">Data Encryption StandardQ是发明最早的最q泛使用的分l对U加密算法。DES法的入口参数有三个Q?a class="bluekey" target="_blank">Key?a class="bluekey" target="_blank">Data、Mode。其?a class="bluekey" target="_blank">Key?个字节共64位,是DES法的工作密钥;Data也ؓ8个字?4位,是要被加密或被解密的数据QMode为DES的工作方式,有两U:加密或解密?br />
DES法工作程如下Q若Mode为加密模式,则利用Key Ҏ据Dataq行加密Q?生成Data的密码Ş式(64位)作ؓDES的输出结果;如Mode密模式,则利用Key对密码Ş式的数据Dataq行解密Q还原ؓData的明码Ş式(64位)作ؓDES的输出结果。在通信|?/font>l的两端Q双方约定一致的KeyQ在通信的源点用KeyҎ心数据进行DES加密Q然后以密码形式在公共通信|(?a class="bluekey" target="_blank">电话|?/font>Q中传输?a class="bluekey" target="_blank">通信|络的终点,数据到达目的地后Q用同样的Key对密码数据进行解密,便再C明码形式的核心数据。这P便保证了核心数据在公共通信|中传输的安全性和可靠性?br />
也可以通过定期在通信|络的源端和目的端同时改用新的KeyQ便能更q一步提高数据的保密性?br />利用DES法加密的步?br />
Q?Q生成一个安全密钥。在加密或解密Q何数据之前需要有一个密钥。密钥是随同被加密的应用E序一起发布的一D|据,密钥代码如下所C?br />
【生成一个密钥代码?br />