经济时代的社会制度总是自相矛盾,从提倡保护知识产权以来,各种乱七八糟的东西都开始收费,现在估计你也深刻体会到了,生活到处充斥着黄牛党,坐车,看电影,去医院,驾校学车,都要交取额外的费用。在互联网上看电影也收费的,快播死后,免费的A片资源也没得看了。
然而互联网行业是个提倡开源的行业,很多人以收取服务费用。但我个人认为开源的门很快就会闭上,现在就java商业软件的简单加密方法。现在最流行的加密方法就是 android 的签名工具apk了,现在就解释一下原理。
在java核心卷2中提到,对类文件加密有很大的用途,如果没有加密秘钥,类文件就毫无用途。它们既不能被标准的虚拟机执行,也不能被轻易的反编译。
加密类文件的关键是,需要一个自定义的类加载器,在加载完成了需要对类的内容进行解密,然后正常运行,而没有秘钥的类文件,由于加密算法的缘故,显示的是乱码。
//类文件简单加密
public static void encoder(String src,String des, String keyword){
try {
FileInputStream in=new FileInputStream(src);
FileOutputStream out=new FileOutputStream(des);
int key=Integer.parseInt(keyword);
int ch;
while((ch=in.read())!=-1){
byte c=(byte)(ch+key);
out.write(c);
}
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 要重写findclass这个方法,loadclass会调用它
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
byte[] classBytes = null;
try {
classBytes = loadClassBytes(name);
} catch (IOException e) {
e.printStackTrace();
}
name=name.substring(0,name.length()-1);
Class c1 = defineClass(name, classBytes, 0, classBytes.length, null);
if (c1 == null)
throw new ClassNotFoundException(name);
return c1;
}
private byte[] loadClassBytes(String name) throws IOException{
String cname=name.replace('.', '/')+".clazz";
FileInputStream in = null;
try {
// in=new FileInputStream(this.getClass().getResource("/")+"/"+ cname);
in=new FileInputStream("d://"+ cname);
ByteArrayOutputStream buffer=new ByteArrayOutputStream();
int ch;
//类文件解密
while((ch=in.read())!=-1){
byte b=(byte)(ch-key);
buffer.write(b);
}
in.close();
return buffer.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
in.close();
}
return null;
}
运行
private void runClass(String name, String key) {
try {
MyClassLoader loader = new MyClassLoader(name, key);
Class c = loader.loadClass(name);
String[] args = new String[] {};
Method m = c.getMethod("main", args.getClass());
m.invoke(null, (Object) args);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, e);
}
}
加密的外在表现为“文件类型的多样性”。无论是doc,docx,excel ,还是bat,ext,ini,随便你怎么搞。