java 字节码被加密后仍可以反编译

yuanxulong198010 2009-01-07 02:33:44
各位大虾,我在网上找了一些加密的资料,然后照着方法对class进行加密,可是加密后虽然不能运行了,但是仍可以使用Jad v1.5.8反编译出来,但是别的类型的文件,比如xml,zip等在加密后却无法打开,不知道是为什么?加密代码如下:
public class AESUtil {
/**
* @param args
* 密码运算参数: args[0]:运算模式,可取值有 encrypt:加密运算 decrypt:解密运算
* args[1]:用户口令,长度固定为16字节(16个英文字符或8个常用汉字)
* args[2]:明文(待进行密码处理的文件)路径,可以为相对或绝对路径
* args[3]:密文(经过密码处理后的文件)路径,可以为相对或绝对路径
*/
public static void main(String[] args) {
int t = 0;
if ("encrypt".equalsIgnoreCase(args[0])) {
t = 1;
} else if ("decrypt".equalsIgnoreCase(args[0])) {
t = 2;
}

String k = args[1];
String p = args[2];
String e = args[3];

try {
c(t, k, p, e);

System.out.println("OK!");
javax.swing.JOptionPane.showMessageDialog(null, "OK!");

} catch (Exception exp) {
exp.printStackTrace();
}
}

/**
* AES密码运算处理
*
* @param t
* 密码运算模式:加密或解密
* @param k
* 密码口令
* @param s
* 密码运算输入文件路径
* @param d
* 密码运算输出文件路径
* @throws Exception
*/
private static final void c(int t, String k, String s, String d)
throws Exception {
java.io.FileInputStream i = new java.io.FileInputStream(s);
java.io.FileOutputStream o = new java.io.FileOutputStream(d);
javax.crypto.Cipher c = javax.crypto.Cipher.getInstance("AES");
c.init(t, new javax.crypto.spec.SecretKeySpec(k.getBytes(), "AES"));

byte[] b = new byte[8192];
int l = i.read(b);
while (l > 0) {
o.write(c.update(b, 0, l));
l = i.read(b);
}
o.write(c.doFinal());

o.flush();
o.close();
i.close();
}

}
...全文
342 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanxulong198010 2009-01-08
  • 打赏
  • 举报
回复
问题搞清楚了,费了一下午的时间才发现是反编译工具有可能有缓存的问题,结帖了。
老紫竹 2009-01-07
  • 打赏
  • 举报
回复
代码在你那里,加密后的数据在你那里。我怎么可能知道为啥解密不了?

你这问题太偏了。我想能帮你的人没有几个、

不懂。
yuanxulong198010 2009-01-07
  • 打赏
  • 举报
回复
现在CSDN好像越来越冷清了哦,没人帮忙啊
yuanxulong198010 2009-01-07
  • 打赏
  • 举报
回复
自己顶一下先!
众所周知,java开发语言提供了很方便的开发平台,而且开发出来的程序很容易在不同的平台上面进行移植,现在越来越多的人使用它开发软件。 Java有了它方便的一个方面,但是他同时也带给了开发者一个烦恼,这就是保护的办法不多,而且大多数不是很好用,这样自己辛苦开发出来的程序很容易被人反编译过来而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱以达到没有办法来反编译观看源代码,但是这种办法在网上很容易找到相关的软件来重新整理,那么这个混编只能控制一些本来也没有办法动您的软件的人,而对于一些掌握工具的人几乎是透明的,还有就是利用硬件加密锁,但大多数公司提供的硬件加密锁只是提供了一些dll的连接或简单的api调用,只要反编译他们,就很容易把一些api调用去掉,这样硬件加密锁也就不起作用了,但是现在到底有没有好的办法呢? 市场上现有的几款防止反编译工具其实都是改进了加载过程。但是加载到JAVA虚拟机后一样可以得到CLASS字节码的。 只要懂JAVA原理的人其实很用意破解的. JAVACOMPILE 这款工具就不一样了,javacompile 它是修改了虚拟机内核, 用户目录里没有需要的JAVA字节码,而是当JAVA需要调用函数的时候才通过网络下载相对应的已经二次编译的字节码,就算用户通过 CLASS.getClass 也得不到可以用来反编译字节码。 真正意义上保护了JAVA知识产权。 个人版限制编译30个CLASS文件,文件打包方式下载。

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧