众所周知,java汇编是很容易被反汇编成源码的,那么怎么给.class文件加密呢?给100!!!! JBuilder里也带混淆器,编译的时候选上就可以了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Jbuilder 8以后就支持混淆器了,但是对性能有影响 只能使用混淆器了,因为java的字节吗的调用使用了简单的堆栈!而且本身又有着严格的语法规范!所以非常容易恢复成源文件!混淆器只能增加反编译的难度,却不能从根本上杜绝反编译。 我下过国外高手写的.class,用JAD反编译得到的结果竟然是什么都没有请问这是为什么? Jbuilder7以上版本的Wizard菜单里面可以生成.exe文件了。这样就可以起到简单的加密功能/ 我刚在文档中心看了篇文章,一个牛人写的大家可以看看http://www.csdn.net/develop/Read_Article.asp?Id=18807 只能增加反汇编的难度,不可能完全杜绝,即使编译成exe也可以轻松的被反编译! http://www-900.ibm.com/developerWorks/cn/java/l-protectjava/index.shtmlhttp://www-900.ibm.com/developerWorks/cn/java/j-staticsec/index.shtml DES加密生成密钥:// GenerateKey.javaimport java.security.*;import javax.crypto.*;import javax.crypto.spec.*;public class GenerateKey{ static public void main( String args[] ) throws Exception { String keyFilename = "key.data"; String algorithm = "DES"; // 生成密匙 SecureRandom sr = new SecureRandom(); KeyGenerator kg = KeyGenerator.getInstance( algorithm ); kg.init( sr ); SecretKey key = kg.generateKey(); // 把密匙数据保存到文件 Util.writeFile( keyFilename, key.getEncoded() ); }}加密解密:import java.io.*;import java.security.*;import java.lang.reflect.*;import javax.crypto.*;import javax.crypto.spec.*;public class Encrypt extends ClassLoader{ public Encrypt(){} static public void main( String args[] ) throws Exception { String keyFilename = "key.data"; String algorithm = "DES"; Cipher cipher; // 生成密匙 SecureRandom sr = new SecureRandom(); byte rawKey[] = Util.readFile( keyFilename ); DESKeySpec dks = new DESKeySpec( rawKey ); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( algorithm ); SecretKey key = keyFactory.generateSecret( dks ); // 创建用于实际加密操作的Cipher对象 Cipher ecipher = Cipher.getInstance( algorithm ); Cipher dcipher = Cipher.getInstance( algorithm ); ecipher.init( Cipher.ENCRYPT_MODE, key, sr ); dcipher.init( Cipher.DECRYPT_MODE, key, sr ); // 加密命令行中指定的每一个类 String filename = "Foo.class"; String filename1 = "FooEncrypt.class"; String filename2 = "FooDecrypt.class"; // 读入类文件 byte classData[] = Util.readFile( filename ); // 加密 byte encryptedClassData[] = ecipher.doFinal( classData ); Util.writeFile( filename1, encryptedClassData ); //解密 byte decryptedClassData[] = dcipher.doFinal( encryptedClassData ); Util.writeFile( filename2, decryptedClassData ); }public Class getClass(String name,byte[] data) { return defineClass( name, data, 0, data.length ); }}//读写文件:// Util.javaimport java.io.*;public class Util{ // 把文件读入byte数组 static public byte[] readFile( String filename ) throws IOException { File file = new File( filename ); long len = file.length(); byte data[] = new byte[(int)len]; FileInputStream fin = new FileInputStream( file ); int r = fin.read( data ); if (r != len) throw new IOException( "Only read "+r+" of "+len+" for "+file ); fin.close(); return data; } // 把byte数组写出到文件 static public void writeFile( String filename, byte data[] ) throws IOException { FileOutputStream fout = new FileOutputStream( filename ); fout.write( data ); fout.close(); }}其他还在研究 Java NIO 求解java配置环境变量出错 swing怎么能自动最小化?? 一个监听事件的问题··谢谢··· 有关classpath环境变量,请高手指点 关于接口的一个小小问题~~ 关于扩展包的路径问题.(赶集啊) 怎么将科学计数方式转成普通数值? [100分]奇怪的GregorianCalendar类问题,时间不准?[100分] 关于log4j的configuration文件写法??? 菜鸟问题:jbuilder大人请入 请教这个错误是什么意思?
请问这是为什么?
http://www-900.ibm.com/developerWorks/cn/java/j-staticsec/index.shtml
生成密钥:
// GenerateKey.javaimport java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;public class GenerateKey
{
static public void main( String args[] ) throws Exception {
String keyFilename = "key.data";
String algorithm = "DES"; // 生成密匙
SecureRandom sr = new SecureRandom();
KeyGenerator kg = KeyGenerator.getInstance( algorithm );
kg.init( sr );
SecretKey key = kg.generateKey(); // 把密匙数据保存到文件
Util.writeFile( keyFilename, key.getEncoded() );
}
}
加密解密:
import java.io.*;
import java.security.*;
import java.lang.reflect.*;
import javax.crypto.*;
import javax.crypto.spec.*;public class Encrypt extends ClassLoader{
public Encrypt(){} static public void main( String args[] ) throws Exception {
String keyFilename = "key.data";
String algorithm = "DES";
Cipher cipher;
// 生成密匙
SecureRandom sr = new SecureRandom();
byte rawKey[] = Util.readFile( keyFilename );
DESKeySpec dks = new DESKeySpec( rawKey );
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( algorithm );
SecretKey key = keyFactory.generateSecret( dks ); // 创建用于实际加密操作的Cipher对象
Cipher ecipher = Cipher.getInstance( algorithm );
Cipher dcipher = Cipher.getInstance( algorithm );
ecipher.init( Cipher.ENCRYPT_MODE, key, sr );
dcipher.init( Cipher.DECRYPT_MODE, key, sr ); // 加密命令行中指定的每一个类 String filename = "Foo.class";
String filename1 = "FooEncrypt.class";
String filename2 = "FooDecrypt.class";
// 读入类文件
byte classData[] = Util.readFile( filename ); // 加密
byte encryptedClassData[] = ecipher.doFinal( classData );
Util.writeFile( filename1, encryptedClassData );
//解密
byte decryptedClassData[] = dcipher.doFinal( encryptedClassData );
Util.writeFile( filename2, decryptedClassData );
}public Class getClass(String name,byte[] data)
{
return defineClass( name, data,
0, data.length );
}
}
//读写文件:
// Util.javaimport java.io.*;public class Util
{
// 把文件读入byte数组
static public byte[] readFile( String filename ) throws IOException {
File file = new File( filename );
long len = file.length();
byte data[] = new byte[(int)len];
FileInputStream fin = new FileInputStream( file );
int r = fin.read( data );
if (r != len)
throw new IOException( "Only read "+r+" of "+len+" for "+file );
fin.close();
return data;
} // 把byte数组写出到文件
static public void writeFile( String filename, byte data[] )
throws IOException {
FileOutputStream fout = new FileOutputStream( filename );
fout.write( data );
fout.close();
}
}
其他还在研究