很多时候需要在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;
}
}
分享到:
相关推荐
在Java开发中,URL参数加密解密是网络安全的重要环节,特别是在J2EE应用程序中,确保数据传输的安全性至关重要。URL参数通常包含用户敏感信息,如登录凭证、交易详情等,因此需要进行加密处理以防止数据在传输过程中...
本文将深入探讨如何使用Java实现URL加密,特别是基于Base64编码和编码转换的方式。我们将重点关注以下几个方面: 1. **Base64编码**:Base64是一种用于将任意二进制数据编码为ASCII字符的算法,使得数据可以在大...
在这个实例中,可能是在URL中包含了一些敏感信息,如API密钥或个性化参数,为了防止这些信息在传输过程中被窃取或篡改,作者使用了AES来加密URL。 首先,我们来看AES加密的基本原理。AES是一种分组密码,它将明文...
在Android平台上实现登录功能并加密URL是保护用户数据安全的重要步骤。这个过程涉及到网络通信、身份验证以及数据加密等多个方面。下面将详细讲解如何在Android中实现这一目标。 首先,我们要理解登录的基本流程。...
总的来说,"post参数加密请求"涉及的是如何在Java中安全地处理POST请求,通过加密和编码技术来确保数据传输的安全性。开发者需要了解和掌握各种加密算法、编码方法以及相关的Java API,以实现高效且安全的网络通信。
6. **源代码示例**:在提供的"aa"文件中,可能包含了一段使用Java和JSP实现的URL参数加密解密的代码。通过分析这段代码,我们可以学习如何在实际项目中应用这些加密解密技术,理解其工作原理,并了解如何将它们集成...
单点登录(Single Sign-...以上就是关于"单点登录-回调地址-AES加密"的相关知识,涵盖了SSO的工作原理、回调地址的作用、AES加密的使用以及在Java开发中的实现。理解这些概念和实践对于构建安全的分布式系统至关重要。
在总结一下,Spring MVC请求参数与响应结果全局加密和解密可以通过使用AES对称秘钥和SHA-256签名算法来实现。我们需要考虑到第三方的提交方式,兼容不同的ContentType提交方式,并使用EncryptUtils工具类来进行加密...
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...
1. **加密阶段**:在C/C++本地库中,将Java传递过来的字符串(已转换为字节数组)用特定的加密算法(如AES)加密,并返回加密后的字节数组。 2. **传输阶段**:将加密后的字节数组在网络中传输,由于是二进制数据,...
在Java开发中,微信授权和小程序授权是移动应用与微信平台交互的重要环节,主要用于实现用户身份验证和数据安全。本文将详细讲解如何使用Java处理小程序和App的微信授权,以及解析小程序传递的`encryptedData`参数,...
在Spring MVC中,可以创建一个自定义的Bean,该Bean使用Java的`java.security.MessageDigest`类或其他加密库来实现加密功能。 2. **扩展Druid配置**:默认的Druid配置并不直接支持加密的用户名和密码。因此,我们...
本文将深入探讨如何在Android中实现数据传输的参数加密,以确保数据在传输过程中的安全性。 首先,我们要明白数据传输的方式通常有两种:GET和POST。GET请求常用于获取数据,而POST请求更适合提交数据。然而,无论...
在使用@RequestBody接收前台参数之前可以先在RequestBodyAdvice的实现类中进行参数的解密,当操作结束需要返回数据时,可以在@ResponseBody之后进入ResponseBodyAdvice的实现类中进行参数的加密。 ...
文档"Java加密C#解密 DES算法.doc"主要涉及了两个编程语言——Java和C#之间使用DES(Data Encryption Standard)算法进行加密和解密的实现。DES是一种经典的对称加密算法,它使用一个56位的密钥来对数据进行加密和...
Swetake是早期的二维码库,可能包含了特定的加密算法,如AES(高级加密标准)、RSA(公钥加密标准)或其他非对称加密算法,用于对二维码内的数据进行安全编码。 使用这些加密解密jar包,开发者可以创建能够安全传输...
加密URL参数可以防止中间人攻击,同时保持URL的可读性。 `ConsoleEncryption`可能是包含示例代码的项目文件,它演示了如何在C#控制台应用程序中实现这些加密方法。通过查看和运行这个项目,开发者可以更深入地理解...
本文将介绍一款名为“图形化版的重算 sign 和参数加解密插件”的 Burp 插件,这款插件适用于网络安全分析和渗透测试场景,尤其是针对那些对参数进行加密或添加签名字段的 App 请求。插件的主要功能包括自动加解密...
这两个通用模块可能包含对敏感数据进行加密和解密的逻辑,如使用对称加密(如AES)和非对称加密(如RSA)进行数据保护,或者使用哈希函数(如SHA-256)进行数据完整性验证。 4. **会话管理(Session Management)**...