`
lixinye0123
  • 浏览: 323243 次
  • 性别: 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源代码

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

    java源码包---java 源码 大量 实例

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    java源码包2

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道...

    Java代码保护工具全套源码(jShield)

    jShield是本人基于自定义类加载器技术开发的Java代码保护工具,可以加密保护Jar包或Class文件,适合需要保护Java程序的朋友使用和研究。 jShield是一款WinForm工具,通过图形化界面导入jar包或class文件后,即可...

    java源码包4

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道...

    java源码包3

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道...

    service_classloader

    工程名为service_classloader,功能全部使用corejava实现,使用maven管理依赖,没有使用任何框架(junit除外)。 使用的技术主要包括:classlaoder,加密解密,...5.使用自定义类加载器加载经加密的字节码。 6.进行测试

    JAVA上百实例源码以及开源项目源代码

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    JAVA上百实例源码以及开源项目

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...

    JAVA高并发高性能高可用高扩展架构视频教程

    类加载器的高级特性(自定义类加器实现加密解密) iBATIS开源主流框架(实现半自动化hibernate) 企业实用技能之详解(眼睛横纹模式验证码防止恶意登陆) 动态页面的静态化处理 图片上传技术 在springMVC中实现原始的Excel...

    java开源包4

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包11

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包101

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包6

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包9

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包8

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包5

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

Global site tag (gtag.js) - Google Analytics