环境: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、加密加密密钥需是同一密钥。
相关推荐
6. **配置和部署**:为了启用加密Web项目,可能需要新的配置选项或环境变量来指示Tomcat使用修改后的类加载器,以及提供解密所需的密钥或其他参数。 7. **版本控制和维护**:由于源码已修改,版本控制(如git)和...
在IT领域,加密和解密技术是保护数据安全的关键手段,尤其在Web应用程序中更是不可或缺。"WEB加密解密小系统"是一个典型的示例,它展示了如何在Java Web环境中实现数据的安全存储和访问。该系统的特点是对每个文件...
【标题】"phpweb全部文件解密-没有加密"指的是一个与PHPWeb相关的项目或网站源代码包,其中的所有文件都没有进行加密处理。这通常意味着用户可以自由地查看、理解和编辑这些文件,这对于学习PHPWeb开发、调试或者...
Java中的RSA加密解密算法实现可以应用于各种Java项目,例如移动应用、Web应用等。 本文详细介绍了Java实现的RSA加密解密算法,包括密钥对生成、公钥和私钥的使用、加密和解密、密钥文件的生成等知识点。这些知识点...
### Web.config 加密解密详解 #### 一、概述 在 ASP.NET 应用程序开发过程中,`web.config` 文件是整个项目的核心配置文件之一,它包含了应用程序运行所需的各项配置信息,例如数据库连接字符串、应用程序设置等...
前端JavaScript实现的加密解密代码,通常会利用Web Crypto API或者自定义的加密库来完成。在JavaScript中,由于浏览器环境的限制,可能需要通过Web Worker或Service Worker来处理大量计算任务,以避免阻塞用户界面。...
本文将深入探讨MVC中加密解密的方法,帮助开发者构建更加安全的Web应用。 一、加密的重要性 在Web应用中,数据加密是保护用户隐私和信息安全的关键手段。加密可以防止未经授权的访问,即使数据被截获,也无法直接...
`aesdemo`可能是一个简单的Java Web项目示例,包含了一个运行的网页,用于演示AES加解密的功能。通过查看源码,我们可以学习如何在实际项目中集成和使用AES加密,同时可以方便地将这段代码复制到自己的项目中。 ...
通过分析和理解这些代码,你可以更好地掌握如何在跨平台项目中实现AES加解密的互通。 总之,AES算法在Java和JavaScript之间的互通加解密是一个重要的实践,它涉及到密钥管理、数据格式转换、填充模式和初始化向量的...
本篇文章将深入探讨如何使用C# ASP.NET进行Web.config文件的加密与解密。 首先,我们要理解保护Web.config文件的重要性。Web.config文件通常包含敏感数据,如数据库连接字符串,如果这些信息被未经授权的用户获取,...
公司做项目需要用到国密加解密算法,整合了网上一些算法。前端js sm2加解密 sm3加密 需要用到sm4的自己封装,后台sm2 sm3 sm4 加解密都可以。亲测可以,循环了几万次,加解密都很成功,不存在解密失败的问题,有兴趣...
在本项目中,`Default.aspx`可能是用户交互的界面,它可能包含了一个表单或者按钮,用户可以通过这些元素触发加密或解密操作。`web.config`文件是ASP.NET应用程序的配置文件,可能包含了数据库连接字符串、应用程序...
JavaScript、Java和RSA加密解密是信息安全领域中的关键技术,它们被广泛应用于数据传输、用户认证、Web应用安全等场景。RSA是一种非对称加密算法,以其发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字命名,它...
4. **源码分析**:"FangHome_Crypto"可能是一个类库或项目文件,包含了加密解密的实现。通常,开发者会定义加密和解密的函数,使用上述提到的加密算法,并可能封装了WebService的调用过程。源码分析可以帮助我们理解...
在库的使用上,开发者可以通过阅读库中包含的pb调用demo来快速了解如何在实际项目中应用这些加密解密功能。demo通常是一段简短的代码,展示了库的使用方法和调用接口,帮助开发者在不深入研究整个库的情况下,快速...
JavaScript 和 PHP 在 web 开发中扮演着重要角色,特别是在数据的加解密方面。这两个语言提供了多种加密算法,用于保护用户数据的安全性、确保通信隐私以及验证数据完整性。本篇文章将深入探讨 JavaScript 和 PHP 中...
JavaScript的加密库通常需要与后端进行配合,确保加解密的密钥管理和算法一致性。 在.NET Core后端,C#语言提供了System.Security.Cryptography命名空间,其中包括了对SM4的支持。开发者可以通过创建SM4...
这里我们将讨论一些常见的加密库和函数,以及如何在实际项目中创建自定义加密解密类。 1. **基础加密函数**: - **md5()**:提供128位散列值,但不适用于加密,只适合做数据校验。 - **sha1()**:与md5类似,提供...
本项目"PHP_JAVA_RSA互通加解密"实现了PHP和Java之间使用RSA算法进行数据的加解密操作,确保了跨平台、跨语言的数据安全通信。 首先,RSA(Rivest-Shamir-Adleman)加密算法基于数论中的大数因子分解问题,它的核心...
RSA是一种广泛应用的非对称加密算法,它基于两个密钥——公钥和私钥——进行加解密操作。易语言是一种面向初学者的编程语言,其语法简洁,适合快速开发。在易语言中调用JSEncrypt库来实现RSA加密解密,可以为易语言...