- 浏览: 7349753 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
为了企业的代码的安全,可以在打包之前将类文件加密之后,打包成相关的文件,在加载时,获取类文件信息,并解密加载到JVM中。
关于实现的代码如下:
package com.easyway.space.commons.classloaders.security; import static com.easyway.space.commons.classloaders.security.CommonSpaceConstant.SECURITY_KEY_FILE_LOCATION_KEY; import static com.easyway.space.commons.classloaders.security.CommonSpaceConstant.SYSTEMCONFIG_FILE_LOCATION; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; /** * * 类安全加载工具类 * @author longgangbai * */ public class ClassSecurityUtils { public static Logger logger=Logger.getLogger(ClassSecurityUtils.class); public static String SECURITY_KEY_FILE_LOCATION; static{ SECURITY_KEY_FILE_LOCATION =PropertiesUtils.getProperties(SYSTEMCONFIG_FILE_LOCATION).getProperty(SECURITY_KEY_FILE_LOCATION_KEY); } /** * 将客户端的jar文件通过循环依次加密 * @param clazzPath 类文件路径 * @throws Exception */ public static void cryptClass(String clazzPath) throws Exception { //获取密钥信息 FileInputStream fi = new FileInputStream(new File(SECURITY_KEY_FILE_LOCATION)); byte rawKeyData[]=IOUtils.toByteArray(fi); //创建加密的对象 SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(rawKeyData); SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, key, sr); //获取class文件加密前的信息 File clazzFile=new File(clazzPath); FileInputStream fi2 = new FileInputStream(clazzFile); byte data[] = IOUtils.toByteArray(fi2); //获取加密之后的信息并写入文件 byte encryptedData[] = cipher.doFinal(data); FileOutputStream fo = new FileOutputStream(clazzFile); IOUtils.write(encryptedData, fo); } /** * * 用于解析加密过的class文件的并加载到JVM中 * @param filepath 密钥文件的路径 * @param clazzPath 需要解密的classpath文件的路径 * @param clazzLoader 相应的类加载器 * @throws InvalidKeyException * @throws InvalidKeySpecException * @throws NoSuchAlgorithmException * @throws NoSuchPaddingException * @throws IllegalBlockSizeException * @throws BadPaddingException * @throws ClassNotFoundException */ public static void decryptClass(String filepath,String clazzPath,CustomerClassLoader clazzLoader) throws InvalidKeyException, InvalidKeySpecException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, ClassNotFoundException{ //获取密钥文件的信息 File file=new File(filepath); //获取Class 文件的信息 File clazzFile=new File(clazzPath); if(file.exists()){ try { //获取密钥的信息 byte rawKeyData[] = FileUtils.readFileToByteArray(file); //设置安全算法的密钥 SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(rawKeyData); //采用DES加密的算法 SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks); Cipher cipher = Cipher.getInstance("DES"); //初始化密钥对象 cipher.init(Cipher.DECRYPT_MODE, key, sr); if(clazzFile.exists()) { //获取加密之前的文件的信息 byte rawEncryptedClassData[] = FileUtils.readFileToByteArray(clazzFile); //解密加密文件的信息 byte decryptedClazzData[] = cipher.doFinal(rawEncryptedClassData); //通过类加载器加载类到JVM中 String className=clazzFile.getName(); clazzLoader.loadClass(decryptedClazzData, className); } } catch (IOException e) { logger.error("解析加载文件"+clazzFile.getName(), e); } } } }
发表评论
-
Mule ESB 学习笔记(20)Mule和Spring httpinvoker的整合
2013-08-28 13:59 3779mule的配置文件: <?xml version=& ... -
Mule ESB 学习笔记(19)Mule和RSS的整合
2013-08-28 10:08 2617定时扫描特定目录的rss文件: <?xml vers ... -
Mule ESB 学习笔记(18)Mule和ATOM的整合
2013-08-27 20:00 2637定时读取特定文件的rss文件: <?xml ... -
Mule ESB 学习笔记(17)Mule和JMX的整合
2013-08-27 16:48 4081Agent的实现: package com.easyway ... -
Mule ESB 学习笔记(16)CXF SOAP基于SAML的验证的配置
2013-08-27 15:19 3821mule的配置 <mule xmlns:core=& ... -
Mule ESB 学习笔记(15)CXF SOAP基于JKS的验证的配置
2013-08-27 14:57 3895mule的配置如下: <mule xmlns:cor ... -
Mule ESB 学习笔记(14)CXF SOAP基于UsernameToken的验证
2013-08-27 14:16 7971简单需求: 针对在webservice ... -
Mule ESB 学习笔记(13)CSV数据文件到数据库
2013-08-26 17:54 7061简单需求: ... -
Mule ESB 学习笔记(12)JSON转换器的使用
2013-08-26 13:54 9126在许多情况下,可能需要把类转换为js ... -
Mule ESB 学习笔记(11)Web Service Proxy
2013-08-24 19:32 6652一、WebSevice Proxy 简介 ... -
Mule ESB 学习笔记(10)mule事务配置
2013-08-23 16:36 6259在mule的事务可能为jdbc事务,jms事务 ... -
Mule ESB 学习笔记(9)mule配置常用节点解释
2013-08-23 13:27 34681 Mule-config.x ... -
Mule ESB 学习笔记(8)mule和jersey的整合使用
2013-08-23 11:20 3965在项目常用jesery作为rest ... -
Mule ESB 学习笔记(7)服务调用
2013-08-23 10:44 18933一. 服务调用 1. Mule实现并提供Web Servi ... -
Mule ESB 学习笔记(6)配置模式
2013-08-23 10:42 4792为了节省时间,就不翻译了,摘抄重点总结 ... -
Mule ESB 学习笔记(5)异步请求-响应方式
2013-08-22 15:32 36135.4 异步请求-响应方式 异步请求-响应方式即请求方调用 ... -
Mule ESB 学习笔记(4)同步方式
2013-08-22 15:19 42735.3 同步方式 同步方式即请求方调用 ... -
JBOSS EJB3项目启动执行一个任务
2013-08-06 22:26 3865在jboss的项目中,jboss启动 ... -
Jboss @Service的使用
2013-08-06 21:59 2006Jboss有一个扩展的annotation——@Servic ... -
julian Date 计算 和实现
2013-08-01 09:32 4476Qt库里CBSDate类的内部实现用_jd成员进行计算、比较 ...
相关推荐
"Java代码保护,防止反编译" 本文讨论了Java程序的保护方法,以防止反编译和盗版。由于Java语言的特点,使得反编译变得非常容易。因此,保护Java程序变得非常重要。本文首先讨论了保护Java程序的基本方法,然后对...
Java反编译工具是开发者在特定情况下非常有用的工具,它能够将已经编译好的.class文件转换回源代码的.java文件。这种技术对于软件维护、学习他人代码、逆向工程或者理解已有的二进制库的工作原理都至关重要。本文将...
Java反编译是将已编译的Java字节码(.class文件)转换回源代码(.java文件)的过程,这对于理解已加密或混淆的代码、逆向工程库或者研究软件内部工作原理非常有用。这款名为“咖啡图形的java反编译工具”很可能是一...
Java反编译是Java开发中一个重要的辅助工具,它能够帮助开发者查看已编译的`.class`文件中的源代码,即使原始的`.java`源文件已经丢失或未被提供。这个过程对于理解类库的工作原理、逆向工程、调试、学习或者分析...
Java反编译是将已编译的字节码(.class文件)转换回源代码(.java文件)的过程。在开发或维护项目时,如果原始的源代码丢失或不可用,反编译工具就能派上用场。这些工具可以帮助开发者理解代码的功能,修复错误,...
### 防止Java反编译的策略与技术解析 #### 概述 在软件开发领域,保护代码免受逆向工程(反编译)的威胁是至关重要的,尤其是在Java编程语言中,因其字节码的特性使得其相对易于被反编译。本文将深入探讨几种常用...
此时,就需要用到反编译工具,而jd-gui就是这样一款强大的JAVA反编译工具。它以其简单易用、功能齐全的特点,深受广大开发者喜爱。 首先,jd-gui是一款开源的Java反编译工具,能够将字节码还原为接近原始的Java源...
在Java开发过程中,有时我们需要查看或分析已编译的.class文件中的源代码,这就涉及到Java的反编译技术。反编译是将字节码还原为接近原生的源代码的过程,常用工具有JD-GUI,它是一款直观的Java反编译器。然而,当...
本篇文章将详细介绍Java的jar反编译工具——JD-GUI以及如何使用它来反编译Java Class文件。 JD-GUI是一款直观的图形用户界面工具,专门用于反编译Java的Class文件,从而帮助开发者查看和理解字节码背后的源代码。它...
Java反编译是Java开发中一个重要的辅助工具,主要用于查看和理解Java字节码,将已编译的.class文件或.jar文件转换回源代码形式。这在进行逆向工程、学习开源项目、修复bug或者理解未知代码的工作流程时非常有用。...
java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译的工具,非常好用 java反编译...
jad 是应用最广泛的java 反编译工具;其本身是命令行工具;其他很多用具是在jad内核的基础上加了一个图形界面;比如我上传的资源、Cavaj Java Decompiler 以下假设jad.exe在c:\java目录下 一、基本用法 ...
Java反编译是将已编译的Java字节码(.class文件)转换回源代码的过程,这在软件开发、逆向工程、调试和学习他人的代码时非常有用。Java的字节码并不直接对应于源代码,因此需要特定的工具来实现反编译。这些工具可以...
Java反编译与Unicode字符转换是Java开发过程中两个重要的技术环节。反编译是指将已编译的字节码(.class文件)转换回源代码的过程,这对于理解已有的类库或者进行逆向工程非常有用。Unicode是国际通用的字符编码标准,...
本文将深入探讨“安卓、Java反编译工具”这一主题,包括它们的工作原理、常用的反编译工具以及如何使用这些工具来解析编译过的文件。 首先,我们需要理解编译和反编译的基本概念。编译是将源代码(如Java或Android...
Java反编译是将已编译的字节码文件(.class)转换回源代码的过程,主要用于学习、分析和理解他人的代码,或者在没有源代码的情况下修复bug。"JAVA反编译包_小茶杯_jd-gui-1.6.6.jar.7z" 是一个包含Java反编译工具JD-...
Java反编译是将已编译的Java字节码转换回源代码的过程,这对于理解类库的工作原理、学习代码实现或者在没有源代码的情况下调试二进制程序非常有用。JD-GUI是一款流行的Java反编译工具,尤其适用于Mac用户。在本文中...
Java反编译是将已编译的Java字节码(.class文件)转换回源代码的过程,这对于理解或学习已封装的库、框架或者解决逆向工程问题非常有用。在Mac操作系统上,一个常见的Java反编译工具是JD-GUI。JD-GUI是一款图形化...