`
lixinye0123
  • 浏览: 333390 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

JAVA加密解密:自定义类加载器应用

    博客分类:
  • Java
阅读更多
最近在研究JAVA CLASS LOADING技术,已实现了一个自定义的加载器。对目前自定义加载器的应用,还在探讨中。下面是自定义的CLASSLOADER在JAVA加密解密方面的一些研究。 

JAVA安全 

    JAVA是解释执行的语言,对于不同的操作平台都有相应的JVM对字节码文件进行解释执行。而这个字节码文件,也就是我们平时所看到的每一个.class文件。 

    这是我们大家都知道的常识,也就是由.java文件,经过编译器编译,变成JVM所能解释的.class文件。 

    而这个过程,在现在公开的网络技术中,利用一个反编译器,任何人都可以很容易的获取它的源文件。这对于很多人来说是不希望看到的。 

     对于加密解密技术,我懂的不多,有些可以利用某种技术“模糊”JAVA类文件。这样能够使反编译的难度增加。但估计反编译器的技术水平也在不断提升,导致 这种方法层层受阻。另外还有很多其他的技术也可以实现对JAVA文件的加密解密。我现在所想要研究的,就是其中的一种。 

    JAVA的灵活性使反编译变得容易,同时,也让我们的加密解密的方法变得灵活。 

利用自定义的CLASSLOADER 

参照:http://www.blogjava.net/realsmy/archive/2007/04/18/111582.html 

JAVA中的每一个类都是通过类加载器加载到内存中的。对于类加载器的工作流程如下表示: 
1.searchfile()  
找到我所要加载的类文件。(抛除JAR包的概念,现在只是要加载一个.class文件) 
2.loadDataClass() 
读取这个类文件的字节码。 
3.difineClass() 
加载类文件。(加载的过程其实很复杂,我们现在先不研究它。) 

    从这个过程中我们能很清楚的发现,自定义的类加载能够很轻松的控制每个类文件的加载过程。这样在第二步(loadDataClass)和第三步(difineClass)之间,我们将会有自己的空间灵活的控制这个过程。 

我们加密解密的技术就应用到这里。 

加密解密 

    JAVA加密解密的技术有很多。JAVA自己提供了良好的类库对各种算法进行支持。对于采用哪种算法,网络上说法不一,自己去GOOGLE一下吧。 

下面用DES对称加密算法(设定一个密钥,然后对所有的数据进行加密)来简单举个例子。 

首先,生成一个密钥KEY。 
我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它,谁就能解开我们的类文件。代码参考如下: 
package com.neusoft.jiami; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.security.SecureRandom; 
import javax.crypto.KeyGenerator; 
import javax.crypto.SecretKey; 

class Key { 

    private String keyName; 

    public Key(String keyName) { 
        this.keyName = keyName; 
    } 

    public void createKey(String keyName) throws Exception { 

        // 创建一个可信任的随机数源,DES算法需要 
        SecureRandom sr = new SecureRandom(); 
        // 用DES算法创建一个KeyGenerator对象 
        KeyGenerator kg = KeyGenerator.getInstance("DES"); 
        // 初始化此密钥生成器,使其具有确定的密钥长度 
        kg.init(sr); 
        // 生成密匙 
        SecretKey key = kg.generateKey(); 
        // 获取密钥数据 
        byte rawKeyData[] = key.getEncoded(); 
        // 将获取到密钥数据保存到文件中,待解密时使用 
        FileOutputStream fo = new FileOutputStream(new File(keyName)); 
        fo.write(rawKeyData); 
    } 

    public static void main(String args[]) { 
        try { 
            new Key("key.txt"); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 

    } 

最近在研究JAVA CLASS LOADING技术,已实现了一个自定义的加载器。对目前自定义加载器的应用,还在探讨中。下面是自定义的CLASSLOADER在JAVA加密解密方面的一些研究。 

JAVA安全 

    JAVA是解释执行的语言,对于不同的操作平台都有相应的JVM对字节码文件进行解释执行。而这个字节码文件,也就是我们平时所看到的每一个.class文件。 

    这是我们大家都知道的常识,也就是由.java文件,经过编译器编译,变成JVM所能解释的.class文件。 

    而这个过程,在现在公开的网络技术中,利用一个反编译器,任何人都可以很容易的获取它的源文件。这对于很多人来说是不希望看到的。 

     对于加密解密技术,我懂的不多,有些可以利用某种技术“模糊”JAVA类文件。这样能够使反编译的难度增加。但估计反编译器的技术水平也在不断提升,导致 这种方法层层受阻。另外还有很多其他的技术也可以实现对JAVA文件的加密解密。我现在所想要研究的,就是其中的一种。 

    JAVA的灵活性使反编译变得容易,同时,也让我们的加密解密的方法变得灵活。 

利用自定义的CLASSLOADER 

参照:http://www.blogjava.net/realsmy/archive/2007/04/18/111582.html 

JAVA中的每一个类都是通过类加载器加载到内存中的。对于类加载器的工作流程如下表示: 
1.searchfile()  
找到我所要加载的类文件。(抛除JAR包的概念,现在只是要加载一个.class文件) 
2.loadDataClass() 
读取这个类文件的字节码。 
3.difineClass() 
加载类文件。(加载的过程其实很复杂,我们现在先不研究它。) 

    从这个过程中我们能很清楚的发现,自定义的类加载能够很轻松的控制每个类文件的加载过程。这样在第二步(loadDataClass)和第三步(difineClass)之间,我们将会有自己的空间灵活的控制这个过程。 

我们加密解密的技术就应用到这里。 

加密解密 

    JAVA加密解密的技术有很多。JAVA自己提供了良好的类库对各种算法进行支持。对于采用哪种算法,网络上说法不一,自己去GOOGLE一下吧。 

下面用DES对称加密算法(设定一个密钥,然后对所有的数据进行加密)来简单举个例子。 

首先,生成一个密钥KEY。 
我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它,谁就能解开我们的类文件。代码参考如下: 
package com.neusoft.jiami; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.security.SecureRandom; 
import javax.crypto.KeyGenerator; 
import javax.crypto.SecretKey; 

class Key { 

    private String keyName; 

    public Key(String keyName) { 
        this.keyName = keyName; 
    } 

    public void createKey(String keyName) throws Exception { 

        // 创建一个可信任的随机数源,DES算法需要 
        SecureRandom sr = new SecureRandom(); 
        // 用DES算法创建一个KeyGenerator对象 
        KeyGenerator kg = KeyGenerator.getInstance("DES"); 
        // 初始化此密钥生成器,使其具有确定的密钥长度 
        kg.init(sr); 
        // 生成密匙 
        SecretKey key = kg.generateKey(); 
        // 获取密钥数据 
        byte rawKeyData[] = key.getEncoded(); 
        // 将获取到密钥数据保存到文件中,待解密时使用 
        FileOutputStream fo = new FileOutputStream(new File(keyName)); 
        fo.write(rawKeyData); 
    } 

    public static void main(String args[]) { 
        try { 
            new Key("key.txt"); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 

    }
分享到:
评论

相关推荐

    Java加壳源码-自定义类加载器

    默认的类加载器包括Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和AppClassLoade(应用程序类加载器),它们按照双亲委派模型工作。 自定义类加载器的创建通常涉及以下步骤: 1...

    自定义类加载器

    在Java编程语言中,类加载器(ClassLoader)是...理解类加载器的工作原理和如何创建自定义类加载器对于优化应用程序和实现高级功能至关重要。在实际开发中,根据项目需求,适当地利用自定义类加载器可以带来诸多便利。

    java 类加载器 加密

    在这个例子中,`EncryptedClassLoader`是我们的自定义加载器,它覆盖了`findClass`方法以处理加密的类。`main`方法中,我们使用`Class.forName`加载类,并传入我们的自定义类加载器。找到main方法后,通过反射调用它...

    Java动态类加载机制分析及其应用.pdf

    通过自定义加载器来加载加密过的 Java 类文件,可以实现快速的部署二级网站,增强网站管理平台的灵活性和可扩展性。 Java 动态类加载机制的优点包括: * 可以在运行时加载类文件,不需要重新启动应用程序 * 可以...

    Android APK 加密 解密工具

    "Android APK 加密 解密工具"就是这样一个专门用于加密和解密APK文件的实用程序,它可以帮助开发者增加额外的安全层,确保只有经过授权的用户能够安装和运行应用。 首先,我们需要理解APK加密的基本原理。通常,APK...

    Java动态类加载机制应用研究.pdf

    此外,通过自定义类加载器,可以对加密的字节码进行解密,这样就保证了代码的安全性,防止了未授权访问。 文章总结出Java语言因其动态类加载机制而具有强大的灵活性和安全度,能够很好地保护代码安全。动态加载机制...

    classloader 加密解密应用程序 ,反编译class

    在`ClassLoader`的层次结构中,有三个基本的类加载器:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader。Bootstrap ClassLoader加载JRE的核心库,Extension ClassLoader加载Java扩展目录下的类,而...

    JAVA数据加密方面的资料

    在这个主题中,我们将深入探讨三个关键知识点:Java中的类加载器(ClassLoader)在加密解密中的应用、常见的加密算法以及Java提供的加密技术。 首先,让我们来看看Java的类加载器如何在加密解密中发挥作用。类加载...

    深入java虚拟机(八)开发自己的类加载器 1

    通常,Java应用程序使用系统默认的类加载器已经能满足大部分需求,但在特定场景下,如动态加载类、加密类文件或从网络加载类等,开发者可能需要自定义类加载器。本篇文章将介绍如何开发自己的类加载器。 类加载器的...

    Java加密解密工具集 JCT v1.0源码包

    Java加密解密工具集JCT(Java Cryptography Toolkit)是一个专为Java开发者设计的库,用于处理各种加密和解密任务。这个v1.0版本提供了丰富的功能,可以帮助开发人员在应用程序中集成安全的加密机制,确保数据的安全...

    java class 加密

    总的来说,Java类加密是一种保护知识产权和代码安全的有效手段,涉及到的主要知识点包括Java字节码、自定义类加载器、加密算法和解密策略。开发者需要熟悉JVM的工作原理以及如何在运行时动态地处理加密的类文件。...

    Java SE: ClassLoader in depth

    深入理解ClassLoader是深入理解Java动态加载机制、自定义类加载器以及对类的热部署等高级特性的重要基础。 在Java中,ClassLoader遵循的是委托模型(Delegation Model)。当一个类加载器接收到一个类加载请求时,它...

    BASE64Decoder加密解密工具jar类.zip

    在给定的资源"BASE64Decoder加密解密工具jar类.zip"中,我们重点关注的是一个Java类库,它提供了对AES(Advanced Encryption Standard)加密算法的支持,以及使用BASE64编码进行解码的功能。这个类库可能包含了一些...

    基于jvmti 的Java 代码加密

    3. **动态加载**:解密后的字节码通过自定义的类加载器加载到JVM,确保正常执行。这样,即使有人获取到了加密后的代码,没有解密密钥也无法直接理解和复用。 4. **安全性增强**:为了防止动态解密过程被篡改,可以...

    Java类加载原理浅析

    **自定义类加载器**是Java提供的强大特性,允许开发者创建自己的类加载器,实现特定的加载逻辑。例如,你可以实现热部署,动态加载网络上的类,或者对类进行加密解密后再加载等。 除了基础的类加载,还有**类的全...

    运用加密技术保护Java源代码

    3. **自定义类加载器**:通过扩展Java的`ClassLoader`类来实现自定义的类加载逻辑,在加载类文件前对其进行解密。 #### 四、具体实施步骤 ##### 1. 选择加密算法 - **对称加密算法**(如AES):速度快,适用于...

    加密Java源代码

    加密Java源代码 ,使用自定义classloader加载器和加密解密技术实现

    对java jar包实现混淆加密

    这通常需要自定义的加载器在运行时解密并加载类。 四、反编译挑战 尽管混淆和加密能增加反编译的难度,但并不能完全阻止专业攻击者的尝试。例如,高级的反编译工具如JD-GUI、FernFlower和JAD可以尝试还原混淆后的...

    ClassLoader 详解.doc

    首先,JVM启动时,会构建一个类加载器的层次结构,主要包括三个基本类加载器: 1. Bootstrap ClassLoader:引导类加载器,也称为原始类加载器。它是整个加载过程的起点,负责加载Java的核心类库,如rt.jar,这是...

Global site tag (gtag.js) - Google Analytics