`
xphwv
  • 浏览: 45686 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

web项目加解密

阅读更多

环境:tomcat6.X+struts2.X+MyIbatis+Spring3.x

加密:使用AES加密,将文件的字节码读取,对字节码进行加密后替换源文件

/**
	 * 
	 * 字节加密
	 */
	public static byte[] encrypt(byte[] data, String key) throws Exception {
		Key k = toKey(Base64.decode(key));
		byte[] raw = k.getEncoded();
		SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);
		Cipher cipher = Cipher.getInstance(ALGORITHM);
		cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
		return cipher.doFinal(data);
	}

 解密:

1、在tomcat的WebappClassLoader中修改源码(自动义类加载器);

2、修改spring源码Code包源码。

加密方法

public static byte[] decrypt(byte[] data, String key) throws Exception {
		Key k = toKey(Base64.decode(key));
		byte[] raw = k.getEncoded();
		SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);
		Cipher cipher = Cipher.getInstance(ALGORITHM);
		cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
		return cipher.doFinal(data);
	}

在 WebappClassLoader中解密

/**
			 * 判断如需是需要解密的类进行数据处理
			 * */
            //--------------------------------------start----------------------------------//
            byte []data=null;
            try {
				if(isDecode(name)){
					System.out.println("2818:--&&&-"+name);
					data=AESUtils.decrypt(entry.binaryContent, key);
				}else{
					data=entry.binaryContent;
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
            try {
            	  clazz = defineClass(name, data, 0,
            			  data.length, 
                          new CodeSource(entry.codeBase, entry.certificates));
            	  //--------------------------------------end----------------------------------//

 在spring的code包的SimpleMetadataReader修改器构造函数

// TODO 修改源码判断是否需要解密
	SimpleMetadataReader(Resource resource, ClassLoader classLoader)
			throws IOException {
		InputStream is = resource.getInputStream();
		ClassReader classReader = null;
		try {
			String name = "";
			if (resource.getURI().toString().indexOf("jar:file") == -1) {
				name = resource.getFile().getAbsolutePath();
				if (!"".equals(name) && isDecode(name, cams)) {
					byte[] data = inputStreamToByte(is);
					try {
						is = new ByteArrayInputStream(AESUtils.decrypt(data,
								key));
//						 is = new ByteArrayInputStream(data);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
			classReader = new ClassReader(is);
		} finally {
			is.close();
		}

 在LocalVariableTableParameterNameDiscoverer同样需要进行解密。

注:(此加密有弊端)

1、加密解密算法需保持一致。

2、加密加密密钥需是同一密钥。     

 

分享到:
评论
1 楼 navy_1025 2016-06-16  

相关推荐

    apache-tomcat-8.5.87-src 类加载器WebappClassLoaderBase修改,web项目加密解密

    6. **配置和部署**:为了启用加密Web项目,可能需要新的配置选项或环境变量来指示Tomcat使用修改后的类加载器,以及提供解密所需的密钥或其他参数。 7. **版本控制和维护**:由于源码已修改,版本控制(如git)和...

    WEB 加密解密小系统

    在IT领域,加密和解密技术是保护数据安全的关键手段,尤其在Web应用程序中更是不可或缺。"WEB加密解密小系统"是一个典型的示例,它展示了如何在Java Web环境中实现数据的安全存储和访问。该系统的特点是对每个文件...

    phpweb全部文件解密-没有加密

    【标题】"phpweb全部文件解密-没有加密"指的是一个与PHPWeb相关的项目或网站源代码包,其中的所有文件都没有进行加密处理。这通常意味着用户可以自由地查看、理解和编辑这些文件,这对于学习PHPWeb开发、调试或者...

    Java实现的RSA加密解密算法示例

    Java中的RSA加密解密算法实现可以应用于各种Java项目,例如移动应用、Web应用等。 本文详细介绍了Java实现的RSA加密解密算法,包括密钥对生成、公钥和私钥的使用、加密和解密、密钥文件的生成等知识点。这些知识点...

    web.config加密解密

    ### Web.config 加密解密详解 #### 一、概述 在 ASP.NET 应用程序开发过程中,`web.config` 文件是整个项目的核心配置文件之一,它包含了应用程序运行所需的各项配置信息,例如数据库连接字符串、应用程序设置等...

    国密SM4算法前后端加密解密完整代码.zip

    前端JavaScript实现的加密解密代码,通常会利用Web Crypto API或者自定义的加密库来完成。在JavaScript中,由于浏览器环境的限制,可能需要通过Web Worker或Service Worker来处理大量计算任务,以避免阻塞用户界面。...

    MVC中加密解密的方法

    本文将深入探讨MVC中加密解密的方法,帮助开发者构建更加安全的Web应用。 一、加密的重要性 在Web应用中,数据加密是保护用户隐私和信息安全的关键手段。加密可以防止未经授权的访问,即使数据被截获,也无法直接...

    AES加解密 java web版

    `aesdemo`可能是一个简单的Java Web项目示例,包含了一个运行的网页,用于演示AES加解密的功能。通过查看源码,我们可以学习如何在实际项目中集成和使用AES加密,同时可以方便地将这段代码复制到自己的项目中。 ...

    AES算法实现Java和JS互通加解密

    通过分析和理解这些代码,你可以更好地掌握如何在跨平台项目中实现AES加解密的互通。 总之,AES算法在Java和JavaScript之间的互通加解密是一个重要的实践,它涉及到密钥管理、数据格式转换、填充模式和初始化向量的...

    C# ASP.NET - 加密解密Web.config文件

    本篇文章将深入探讨如何使用C# ASP.NET进行Web.config文件的加密与解密。 首先,我们要理解保护Web.config文件的重要性。Web.config文件通常包含敏感数据,如数据库连接字符串,如果这些信息被未经授权的用户获取,...

    国密加解密js+java.rar

    公司做项目需要用到国密加解密算法,整合了网上一些算法。前端js sm2加解密 sm3加密 需要用到sm4的自己封装,后台sm2 sm3 sm4 加解密都可以。亲测可以,循环了几万次,加解密都很成功,不存在解密失败的问题,有兴趣...

    .net加密解密算法demo

    在本项目中,`Default.aspx`可能是用户交互的界面,它可能包含了一个表单或者按钮,用户可以通过这些元素触发加密或解密操作。`web.config`文件是ASP.NET应用程序的配置文件,可能包含了数据库连接字符串、应用程序...

    Js Java Rsa 加密解密

    JavaScript、Java和RSA加密解密是信息安全领域中的关键技术,它们被广泛应用于数据传输、用户认证、Web应用安全等场景。RSA是一种非对称加密算法,以其发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字命名,它...

    字串加密解密WebService服务的源码

    4. **源码分析**:"FangHome_Crypto"可能是一个类库或项目文件,包含了加密解密的实现。通常,开发者会定义加密和解密的函数,使用上述提到的加密算法,并可能封装了WebService的调用过程。源码分析可以帮助我们理解...

    pb加密解密哈希库

    在库的使用上,开发者可以通过阅读库中包含的pb调用demo来快速了解如何在实际项目中应用这些加密解密功能。demo通常是一段简短的代码,展示了库的使用方法和调用接口,帮助开发者在不深入研究整个库的情况下,快速...

    js,php加解密

    JavaScript 和 PHP 在 web 开发中扮演着重要角色,特别是在数据的加解密方面。这两个语言提供了多种加密算法,用于保护用户数据的安全性、确保通信隐私以及验证数据完整性。本篇文章将深入探讨 JavaScript 和 PHP 中...

    国密SM4,layui前端 和.net core后台 加密解密 .net加密解密

    JavaScript的加密库通常需要与后端进行配合,确保加解密的密钥管理和算法一致性。 在.NET Core后端,C#语言提供了System.Security.Cryptography命名空间,其中包括了对SM4的支持。开发者可以通过创建SM4...

    PHP 加密解密处理类

    这里我们将讨论一些常见的加密库和函数,以及如何在实际项目中创建自定义加密解密类。 1. **基础加密函数**: - **md5()**:提供128位散列值,但不适用于加密,只适合做数据校验。 - **sha1()**:与md5类似,提供...

    PHP_JAVA_RSA互通加解密

    本项目"PHP_JAVA_RSA互通加解密"实现了PHP和Java之间使用RSA算法进行数据的加解密操作,确保了跨平台、跨语言的数据安全通信。 首先,RSA(Rivest-Shamir-Adleman)加密算法基于数论中的大数因子分解问题,它的核心...

    易语言调用JSEncrypt实现RSA加密解密

    RSA是一种广泛应用的非对称加密算法,它基于两个密钥——公钥和私钥——进行加解密操作。易语言是一种面向初学者的编程语言,其语法简洁,适合快速开发。在易语言中调用JSEncrypt库来实现RSA加密解密,可以为易语言...

Global site tag (gtag.js) - Google Analytics