网站建设技能,政务网站建设及安全,做淘宝客需要自己建网站吗,id 连续 wordpress1 下面用DES对称加密算法(设定一个密钥#xff0c;然后对所有的数据进行加密)来简单举个例子。23 首先#xff0c;生成一个密钥KEY。4 我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它#xff0c;谁就能解开我们的类文件。代码参考如下#xff1a;5 packagecom.n…1 下面用DES对称加密算法(设定一个密钥然后对所有的数据进行加密)来简单举个例子。23 首先生成一个密钥KEY。4 我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它谁就能解开我们的类文件。代码参考如下5 packagecom.neusoft.jiami;6 importJava.io.File;7 importjava.io.FileOutputStream;8 importjava.security.SecureRandom;9 importjavax.crypto.KeyGenerator;10 importjavax.crypto.SecretKey;11 classKey {12 privateString keyName;13 publicKey(String keyName) {14 this.keyName keyName;15 }16 public void createKey(String keyName) throwsException {17 //创建一个可信任的随机数源DES算法需要18 SecureRandom sr newSecureRandom();19 //用DES算法创建一个KeyGenerator对象20 KeyGenerator kg KeyGenerator.getInstance(DES);21 //初始化此密钥生成器,使其具有确定的密钥长度22 kg.init(sr);23 //生成密匙24 SecretKey key kg.generateKey();25 //获取密钥数据26 byte rawKeyData[] key.getEncoded();27 //将获取到密钥数据保存到文件中待解密时使用28 FileOutputStream fo new FileOutputStream(newFile(keyName));29 fo.write(rawKeyData);30 }31 public static voidmain(String args[]) {32 try{33 new Key(key.txt);34 } catch(Exception e) {35 e.printStackTrace();36 }37 }38 }39 第二步对我们所要进行加密的类文件进行加密。40 比如我有一个DigestPass类已经被正常编译好生成DigestPass.class文件。此时这个类文件是任何人都可以用的。因为系统的类加载器可以自动的加载它。那么下一步我们要做的就是把这个类文件加密。使系统的类加载器无法读取到正确的字节码文件。参考代码如下41 packagecom.neusoft.jiami;42 importjava.io.File;43 importjava.io.FileInputStream;44 importjava.io.FileOutputStream;45 importjava.security.SecureRandom;46 importjavax.crypto.Cipher;47 importjavax.crypto.SecretKey;48 importjavax.crypto.SecretKeyFactory;49 importjavax.crypto.spec.DESKeySpec;50 public classJiaMi {51 public static void main(String[] args) throwsException {52 //DES算法要求有一个可信任的随机数源53 SecureRandom sr newSecureRandom();54 //获得密匙数据55 FileInputStream fi new FileInputStream(new File(key.txt));56 byte rawKeyData[] new byte[fi.available()];57 fi.read(rawKeyData);58 fi.close();59 //从原始密匙数据创建DESKeySpec对象60 DESKeySpec dks newDESKeySpec(rawKeyData);61 //创建一个密匙工厂然后用它把DESKeySpec转换成一个SecretKey对象62 SecretKey key SecretKeyFactory.getInstance(DES).generateSecret(dks);63 //Cipher对象实际完成加密操作64 Cipher cipher Cipher.getInstance(DES);65 //用密匙初始化Cipher对象66 cipher.init(Cipher.ENCRYPT_MODE, key, sr);67 //现在获取要加密的文件数据68 FileInputStream fi2 new FileInputStream(new File(DigestPass.class));69 byte data[] new byte[fi2.available()];70 fi2.read(data);71 fi2.close();72 //正式执行加密操作73 byte encryptedData[] cipher.doFinal(data);74 //用加密后的数据覆盖原文件75 FileOutputStream fo new FileOutputStream(new File(DigestPass.class));76 fo.write(encryptedData);77 fo.close();78 }79 }80 第三步用自定义的CLASSLOADER进行加载。参考代码如下81 packagecom.neusoft.jiami;82 importjava.io.File;83 importjava.io.FileInputStream;84 importjava.io.FileOutputStream;85 importjava.security.SecureRandom;86 importjavax.crypto.Cipher;87 importjavax.crypto.SecretKey;88 importjavax.crypto.SecretKeyFactory;89 importjavax.crypto.spec.DESKeySpec;90 importcom.neusoft.classloader.MyClassLoader;91 public classJieMi {92 public static void main(String[] args) throwsException {93 //DES算法要求有一个可信任的随机数源94 SecureRandom sr newSecureRandom();95 //获得密匙数据96 FileInputStream fi new FileInputStream(new File(key.txt));97 byte rawKeyData[] new byte[fi.available()];// new byte[5];98 fi.read(rawKeyData);99 fi.close();100 //从原始密匙数据创建一个DESKeySpec对象101 DESKeySpec dks newDESKeySpec(rawKeyData);102 //创建一个密匙工厂然后用它把DESKeySpec对象转换成一个SecretKey对象103 SecretKey key SecretKeyFactory.getInstance(DES).generateSecret(dks);104 //Cipher对象实际完成解密操作105 Cipher cipher Cipher.getInstance(DES);106 //用密匙初始化Cipher对象107 cipher.init(Cipher.DECRYPT_MODE, key, sr);108 //现在获取数据并解密109 FileInputStream fi2 new FileInputStream(new File(DigestPass.class));110 byte encryptedData[] new byte[fi2.available()];111 fi2.read(encryptedData);112 fi2.close();113 //正式执行解密操作114 byte decryptedData[] cipher.doFinal(encryptedData);115 //这时把数据还原成原有的类文件116 //FileOutputStream fo new FileOutputStream(new117 //File(DigestPass.class));118 //fo.write(decryptedData);119 //用解密后的数据加载类并应用120 MyClassloader mcl new MyClassloader(E:/);121 Class cl mcl.loadClass(decryptedData, com.neusoft.jiami.DigestPass);122 DigestPass dp cl.newInstance();123 }124 }