Java加密解密 – 自界说类加载器的应用
JAVA是表明执行的语言,对付差异的操纵平台都有相应的JVM对字节码文件举办表明执行。而这个字节码文件,也就是我们平时所看到的每一个.class文件。这是我们各人都知道的知识,也就是由.java文件,颠末编译器编译,酿成JVM所能表明的.class文件。而这个进程,在此刻果真的网络技能中,操作一个反编译器,任何人都可以很容易的获取它的源文件。这对付许多人来说是不但愿看到的。对付加密解密技能,我懂的不多,有些可以操作某种技能“恍惚”JAVA类文件。这样可以或许使反编译的难度增加。但预计反编译器的技能程度也在不绝晋升,导致这种要领层层受阻。别的尚有许多其他的技能也可以实现对JAVA文件的加密解密。我此刻所想要研究的,就是个中的一种。JAVA的机动性使反编译变得容易,同时,也让我们的加密解密的要领变得机动。操作自界说的CLASSLOADER。
JAVA中的每一个类都是通过类加载器加载到内存中的。对付类加载器的事情流程如下暗示:
1.searchfile()
找到我所要加载的类文件。(抛除JAR包的观念,此刻只是要加载一个.class文件)
2.loadDataClass()
读取这个类文件的字节码。
3.difineClass()
加载类文件。(加载的进程其实很巨大,我们此刻先不研究它。)从这个进程中我们能很清楚的发明,自界说的类加载可以或许很轻松的节制每个类文件的加载进程。这样在第二步(loadDataClass)和第三步(difineClass)之间,我们将会有本身的空间机动的节制这个进程。我们加密解密的技能就应用到这里。加密解密 JAVA加密解密的技能有许多。JAVA本身提供了精采的类库对各类算法举办支持。对付回收哪种算法,网络上说法纷歧。下面用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();
}
}
}