[转]java利用AES实现URL的参数加密
原文地址:http://h5566h.iteye.com/blog/1465426
很多时候需要在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利用AES实现URL的参数加密的更多相关文章
- 利用MVC的过滤器实现url的参数加密和解密
		
最近在与一个IOS应用做接口对接,之前一直都没有遇到什么很大的问题,但是有一天发现可以通过软件解析app的url,然后直接通过url的拼接修改接口数据,这一下使得数据的安全性和准确性都降低了,于是就想 ...
 - Java利用MessageDigest提供的MD5算法加密字符串或文件
		
MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了 ...
 - ASP.NET - URL中参数加密解密操作
		
效果: 代码: using System; using System.Text; using System.IO; using System.Security.Cryptography; public ...
 - js获取url中参数名也参数值
		
要撮利用js获取url中参数名也参数值这个不多见了,但我今天需要这样操作,下面我来给大家介绍一下具体的实例方法. 在已知参数名的情况下,获取参数值,使用正则表达式能很容易做到. js的实现方法如下 ...
 - (转)Java程序利用main函数中args参数实现参数的传递
		
Java程序利用main函数中args参数实现参数的传递 1.运行Java程序的同时,可以通过输入参数给main函数中的接收参数数组args[],供程序内部使用!即当你在Java命令行后面带上参数,J ...
 - Liferay中利用URL传参数
		
业务场景:现在有一个新闻系统,有两个页面,A是新闻列表页面/web/guest/home,B是新闻的详情页面/web/guest/newsview. 业务逻辑为:在A页面中,点击新闻的标题进入B页面, ...
 - IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数
		
因为项目需要解析URL当中参数的部分,在网上搜索了一下都没有相关的资料. 然后就自己写了一个 其实我就是通过正则表达式来处理URL 进行解析的 好了直接上代码吧 也是非常的简单,大家拷贝过去就可以使用 ...
 - vue-router 利用url传递参数
		
vue-router 利用url传递参数 :冒号的形式传递参数 在路由配置文件里以:冒号的形式传递参数,这就是对参数的绑定. 1. 在配置文件里以冒号的形式设置参数.我们在/src/router/i ...
 - Vue-router 第5节 vue-router利用url传递参数
		
Vue-router 第5节 vue-router利用url传递参数 目录 Vue-router 第5节 vue-router利用url传递参数 第5节 vue-router利用url传递参数 冒号的 ...
 
随机推荐
- Android如何实现点击一次返回键返回桌面而不是退出应用
			
具体代码如下所示: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent. ...
 - Android插件化与热修复(六)-微信Tinker原理分析
			
Tinker热修复原理分析 热补丁技术是在用户不需要重新安装应用的情况下实现应用更新,可快速解决一些线上问题.热补丁省去了Android应用发布版本的成本,而且用户端的更新也是无感知的. Tinker ...
 - 再说Android RecyclerView局部刷新那个坑
			
RecyclerView局部刷新大家都遇到过,有时候还说会遇见图片闪烁的问题. 优化之前的效果: 优化之后的效果: 如果想单独更新一个item,我们通常会这样做,代码如下: mLRecyclerV ...
 - CoreImage 中的模糊滤镜
			
1.CoreImage 中的模糊滤镜 1.1CoreImage是苹果用来简化图片处理的框架 1.2CIImage.CIFilter与CIContext三者联系 1.3CIGaussianBlur中可能 ...
 - VS Code 中文注释显示乱码
			
将设置中的"files.autoGuessEncoding"项的值改为true即可. 1.文件 2.首选项 3.设置 4.搜索 "files.autoGuessEncod ...
 - [转]OkHttp3 最有营养的初级教程
			
一.前言 自从Android4.4开始,google已经开始将源码中的HttpURLConnection替换为OkHttp,而在Android6.0之后的SDK中google更是移除了对于HttpCl ...
 - git 权限问题:insufficient permission for adding an object to repository database .git
			
在git pull 的时候报错:insufficient permission for adding an object to repository database .git (去仓库里的objec ...
 - Jenkins管理静态资源
			
这里我们的前端是使用webpack来管理静态资源的,把静态资源上传到svn上面来管理 这里我们把项目和静态资源剥离开来,然后静态资源接入CDN 我们的svn的结构是这样的 我们需要把这些目录都进行打包 ...
 - java、oracle对CLOB处理
			
oracle CLOB字段转换位VARCHAR 1.实际上处理CLOB字段的时候,直接TO_CHAR,当长度超过4000的时候,会报错,提示列被截取: CLOB转varchar2:select to_ ...
 - ios 精简日历
			
网上其他人写的日历类功能都很齐全,比较繁杂,对于想看看日历基础实现然后自己绘制日历的我来说不太方便,就自己整理了一个极精简的日历出来,大家看了之后应该能多少理解日历该怎么自定义,很简单. 我的小dem ...