利用 DES 加密算法保护 Java 源代码 学术部 张亚涛
摘 要:本文首先分析了 Java 源代码需要加密的原因,简要介绍了 DES 算 法及 Java 密码体系和 Java 密码扩展, 最后说明了利用 DES 加密算法保护 Java 源代码的方法及步骤.
关键词 Java 加密 DES 算法
Java 语言是一种非常适用于网络编程的语言,它的基本结构与 C++ 极为相似,但抛弃了 C/C++中指针等内容, 同时它吸收了 Smalltalk, C++ 面向对象的编程思想.它具有简单性,鲁棒性,可移植性,动态性等特点. 这些特点使得 Java 成为跨平台应用开发的一种规范, 在世界范围内广泛流 传.
加密 Java 源码的原因
Java 源代码经过编译以后在 JVM 中执行.由于 JVM 界面是完全透明 的,Java 类文件能够很容易通过反编译器重新转换成
源代码.因此,所有 的算法, 类文件等都可以以源代码的形式被公开, 使得软件不能受到保护, 为了保护产权,一般可以有以下几种方法:
(1)"模糊"类文件,加大反编译器反编译源代码文件的难度.然而, 可以修改反编译器, 使之能够处理这些模糊类文件. 所以仅仅依赖"模糊类 文件"来保证代码的安全是不够的.
(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 对象其实并不困难,只需先获得原始数据,接着就可
以进行包含解密在内的任何转换.
Java 密码体系和
Java 密码扩展
Java 密码体系(JCA)和 Java 密码扩展(JCE)的设计目的是为 Java 提供 与实现无关的加密函数 API.它们都用 factory 方法来创建类的例程,然后 把实际的加密函数委托给提供者指定的底层引擎,引擎中为类提供了服务 提供者接口在 Java 中实现数据的加密/解密, 是使用其内置的 JCE(Java 加 密扩展)来实现的.Java 开发工具集 1.1 为实现包括数字签名和信息摘要
在内的加密功能,推出了一种基于供应商的新型灵活应用编程接口.Java 密码体系结构支持供应商的互操作,同时支持硬件和软件实现.
Java 密码学结构
设计遵循两个原则:
(1)算法的独立性和可靠性.
(2)实现的独立性和相互作用性.
算法的独立性是通过定义密码服务类来获得.用户只需了解密码算法 的概念,而不用去关心如何实现这些概念. 实现的独立性和相互作用性通过 密码服务提供器来实现.密码服务提供器是实现一个或多个密码服务的一 个或多个程序包.
软件开发商根据一定接口,将各种算法实现后,打包成一
个提供器,用户可以安装不同的提供器.安装和配置提供器,可将包含提供 器的 ZIP 和 JAR 文件放在 CLASSPATH 下,再编辑 Java 安全属性文件来设 置定义一个提供器.Java 运行环境 Sun 版本时, 提供一个缺省的提供器 Sun.
下面介绍 DES 算法及如何利用 DES 算法加密和解密类文件的步骤.
DES 算法简介
DES(Data Encryption Standard)是发明最早的最广泛使用的分组对 称加密算法.DES 算法的入口参数有三个:Key,Data,Mode.其中 Key 为 8 个字节共 64 位, DES 算法的工作密钥; 是 Data 也为 8 个字节