`
h5566h
  • 浏览: 75189 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

java利用AES实现URL的参数加密

 
阅读更多

很多时候需要在URL传参,希望URL参数能够加密,这里我结合了文章http://www.2cto.com/kf/201112/114046.html  提供的思路,然后结合java的ASE加密实现,写了下面的代码:

 

 

代码主要考虑两个问题:1、加密过的字符必须能有使用Url传输 2、加密算法必须是对称算法,通过私钥可以解密

 

另外:代码中为什么要把二进制转换成16进制呢,因为强制把byte数组转化成String的话,会出现乱码,第二是强制转换过的字符串,再转回byte数组的时候,二进制会变化,而且二进制的位数不是16的倍数(解密算法中的输入二进制数组的大小必须是16的倍数)。因此需要二进制的相互转换

 

代码如下:

package p;


import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;



public class AEStest {		
	
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		String str = "user=admin&pwd=admin";
		String key = "12345678";
		String encrytStr;
		byte[] encrytByte;
		
		byte[] byteRe = enCrypt(str,key);
		
		//加密过的二进制数组转化成16进制的字符串
		encrytStr = parseByte2HexStr(byteRe);		
		System.out.println("加密后:"+encrytStr);
		
		//加密过的16进制的字符串转化成二进制数组
		encrytByte = parseHexStr2Byte(encrytStr);		
		System.out.println("解密后:"+deCrypt(encrytByte,key));
		
		
	}
	
	/**
	 * 加密函数
	 * @param content   加密的内容
	 * @param strKey    密钥
	 * @return  		返回二进制字符数组
	 * @throws Exception
	 */
	public static byte[] enCrypt(String content,String strKey) throws Exception{
		KeyGenerator keygen;		
		SecretKey desKey;
		Cipher c;		
		byte[] cByte;
		String str = content;
		
		keygen = KeyGenerator.getInstance("AES");
		keygen.init(128, new SecureRandom(strKey.getBytes()));
		
		desKey = keygen.generateKey();		
		c = Cipher.getInstance("AES");
		
		c.init(Cipher.ENCRYPT_MODE, desKey);
		
		cByte = c.doFinal(str.getBytes("UTF-8"));		
		
		return cByte;
	}
	
	/** 解密函数
	 * @param src   加密过的二进制字符数组
	 * @param strKey  密钥
	 * @return
	 * @throws Exception
	 */
	public static String deCrypt (byte[] src,String strKey) throws Exception{
		KeyGenerator keygen;		
		SecretKey desKey;
		Cipher c;		
		byte[] cByte;	
		
		keygen = KeyGenerator.getInstance("AES");
		keygen.init(128, new SecureRandom(strKey.getBytes()));
		
		desKey = keygen.generateKey();
		c = Cipher.getInstance("AES");
		
		c.init(Cipher.DECRYPT_MODE, desKey);
		
		
		cByte = c.doFinal(src);	
		
		return new String(cByte,"UTF-8");
	}
	
	
	/**2进制转化成16进制
	 * @param buf
	 * @return
	 */
	public static String parseByte2HexStr(byte buf[]) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < buf.length; i++) {
			String hex = Integer.toHexString(buf[i] & 0xFF);
			if (hex.length() == 1) {
				hex = '0' + hex;
				}
			sb.append(hex.toUpperCase());
			}
		return sb.toString();
		}
	
	
	/**将16进制转换为二进制
	 * @param hexStr
	 * @return
	 */ 	
	public static byte[] parseHexStr2Byte(String hexStr) { 
	        if (hexStr.length() < 1) 
	                return null; 
	        byte[] result = new byte[hexStr.length()/2]; 
	        for (int i = 0;i< hexStr.length()/2; i++) { 
	                int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16); 
	                int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16); 
	                result[i] = (byte) (high * 16 + low); 
	        } 
	        return result; 
	} 



}

 

分享到:
评论

相关推荐

    URL参数加密解密(java版)

    在Java开发中,URL参数加密解密是网络安全的重要环节,特别是在J2EE应用程序中,确保数据传输的安全性至关重要。URL参数通常包含用户敏感信息,如登录凭证、交易详情等,因此需要进行加密处理以防止数据在传输过程中...

    Java实现url加密处理的方法示例

    本文将深入探讨如何使用Java实现URL加密,特别是基于Base64编码和编码转换的方式。我们将重点关注以下几个方面: 1. **Base64编码**:Base64是一种用于将任意二进制数据编码为ASCII字符的算法,使得数据可以在大...

    AES加密url

    在这个实例中,可能是在URL中包含了一些敏感信息,如API密钥或个性化参数,为了防止这些信息在传输过程中被窃取或篡改,作者使用了AES来加密URL。 首先,我们来看AES加密的基本原理。AES是一种分组密码,它将明文...

    android实现登录并且加密url

    在Android平台上实现登录功能并加密URL是保护用户数据安全的重要步骤。这个过程涉及到网络通信、身份验证以及数据加密等多个方面。下面将详细讲解如何在Android中实现这一目标。 首先,我们要理解登录的基本流程。...

    post参数加密请求.rar

    总的来说,"post参数加密请求"涉及的是如何在Java中安全地处理POST请求,通过加密和编码技术来确保数据传输的安全性。开发者需要了解和掌握各种加密算法、编码方法以及相关的Java API,以实现高效且安全的网络通信。

    jsp加密解密问题.rar

    6. **源代码示例**:在提供的"aa"文件中,可能包含了一段使用Java和JSP实现的URL参数加密解密的代码。通过分析这段代码,我们可以学习如何在实际项目中应用这些加密解密技术,理解其工作原理,并了解如何将它们集成...

    单点登录-回调地址-AES加密.rar

    单点登录(Single Sign-...以上就是关于"单点登录-回调地址-AES加密"的相关知识,涵盖了SSO的工作原理、回调地址的作用、AES加密的使用以及在Java开发中的实现。理解这些概念和实践对于构建安全的分布式系统至关重要。

    Spring MVC请求参数与响应结果全局加密和解密详解

    在总结一下,Spring MVC请求参数与响应结果全局加密和解密可以通过使用AES对称秘钥和SHA-256签名算法来实现。我们需要考虑到第三方的提交方式,兼容不同的ContentType提交方式,并使用EncryptUtils工具类来进行加密...

    ffmpeg文件生成m3u8文件及ts切片程序+128位加密

    FFmpeg支持AES-128加密,命令如下: ``` ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset veryfast -hls_key_info_file key_info.txt -hls_segment_type mpegts output.m3u8 ``` 在这里,`-hls_key_info_file...

    jsp,java中文乱码问题另类解决方案,jni加密、解密编码

    1. **加密阶段**:在C/C++本地库中,将Java传递过来的字符串(已转换为字节数组)用特定的加密算法(如AES)加密,并返回加密后的字节数组。 2. **传输阶段**:将加密后的字节数组在网络中传输,由于是二进制数据,...

    java处理小程序授权和app微信授权

    在Java开发中,微信授权和小程序授权是移动应用与微信平台交互的重要环节,主要用于实现用户身份验证和数据安全。本文将详细讲解如何使用Java处理小程序和App的微信授权,以及解析小程序传递的`encryptedData`参数,...

    druid实现springmvc数据库连接的用户名和密码加密

    在Spring MVC中,可以创建一个自定义的Bean,该Bean使用Java的`java.security.MessageDigest`类或其他加密库来实现加密功能。 2. **扩展Druid配置**:默认的Druid配置并不直接支持加密的用户名和密码。因此,我们...

    Android数据传输中的参数加密代码示例

    本文将深入探讨如何在Android中实现数据传输的参数加密,以确保数据在传输过程中的安全性。 首先,我们要明白数据传输的方式通常有两种:GET和POST。GET请求常用于获取数据,而POST请求更适合提交数据。然而,无论...

    SpringBoot实现接口数据的加解密功能

    在使用@RequestBody接收前台参数之前可以先在RequestBodyAdvice的实现类中进行参数的解密,当操作结束需要返回数据时,可以在@ResponseBody之后进入ResponseBodyAdvice的实现类中进行参数的加密。 ...

    Java加密C#解密 DES算法.doc

    文档"Java加密C#解密 DES算法.doc"主要涉及了两个编程语言——Java和C#之间使用DES(Data Encryption Standard)算法进行加密和解密的实现。DES是一种经典的对称加密算法,它使用一个56位的密钥来对数据进行加密和...

    二维码 加密 解密 jar 包

    Swetake是早期的二维码库,可能包含了特定的加密算法,如AES(高级加密标准)、RSA(公钥加密标准)或其他非对称加密算法,用于对二维码内的数据进行安全编码。 使用这些加密解密jar包,开发者可以创建能够安全传输...

    C#常用加密及解密。

    加密URL参数可以防止中间人攻击,同时保持URL的可读性。 `ConsoleEncryption`可能是包含示例代码的项目文件,它演示了如何在C#控制台应用程序中实现这些加密方法。通过查看和运行这个项目,开发者可以更深入地理解...

    burp插件分享:图形化版的重算sign和参数加解密插件1

    本文将介绍一款名为“图形化版的重算 sign 和参数加解密插件”的 Burp 插件,这款插件适用于网络安全分析和渗透测试场景,尤其是针对那些对参数进行加密或添加签名字段的 App 请求。插件的主要功能包括自动加解密...

    基于Java的两个通用安全模块的设计与实现(源代码+文).zip

    这两个通用模块可能包含对敏感数据进行加密和解密的逻辑,如使用对称加密(如AES)和非对称加密(如RSA)进行数据保护,或者使用哈希函数(如SHA-256)进行数据完整性验证。 4. **会话管理(Session Management)**...

Global site tag (gtag.js) - Google Analytics