JAVA加密解密:自定义类加载器应用 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-25
:2007-05-30
第二步,对我们所要进行加密的类文件进行加密。
比如我有一个DigestPass类,已经被正常编译好生成DigestPass.class文件。此时,这个类文件是任何人都可以用的。因为系统的类加载器可以自动的加载它。那么下一步,我们要做的就是把这个类文件加密。使系统的类加载器无法读取到正确的字节码文件。参考代码如下: package com.neusoft.jiami; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; public class JiaMi { public static void main(String[] args) throws Exception { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 获得密匙数据 FileInputStream fi = new FileInputStream(new File("key.txt")); byte rawKeyData[] = new byte[fi.available()]; fi.read(rawKeyData); fi.close(); // 从原始密匙数据创建DESKeySpec对象 DESKeySpec dks = new DESKeySpec(rawKeyData); // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象 SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance("DES"); // 用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, key, sr); // 现在,获取要加密的文件数据 FileInputStream fi2 = new FileInputStream(new File("DigestPass.class")); byte data[] = new byte[fi2.available()]; fi2.read(data); fi2.close(); // 正式执行加密操作 byte encryptedData[] = cipher.doFinal(data); // 用加密后的数据覆盖原文件 FileOutputStream fo = new FileOutputStream(new File("DigestPass.class")); fo.write(encryptedData); fo.close(); } } 第三步,用自定义的CLASSLOADER进行加载。参考代码如下: package com.neusoft.jiami; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import com.neusoft.classloader.MyClassLoader; public class JieMi { public static void main(String[] args) throws Exception { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 获得密匙数据 FileInputStream fi = new FileInputStream(new File("key.txt")); byte rawKeyData[] = new byte[fi.available()];// = new byte[5]; fi.read(rawKeyData); fi.close(); // 从原始密匙数据创建一个DESKeySpec对象 DESKeySpec dks = new DESKeySpec(rawKeyData); // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对象 SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks); // Cipher对象实际完 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于JAVA加密解密:自定义类加载器应用 - 编程入门网的所有评论