[转]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传递参数 冒号的 ...
随机推荐
- Runway for Mac(UML 流程图绘图工具)破解版安装
1.软件简介 Runway 是 macOS 系统上一款强大实用的软件开发工具,Runway for Mac 是一个界面简单功能强大的UML设计师.此外,Runway for Mac 带给你所有你 ...
- mongodb常用命令小结
一.基于条件的查询 db.getCollection('monitor_log') .find({"requestUrl" : /app\/v1\/findcards\/cn/, ...
- flume+elasticsearch+kibana遇到的坑
在elasticsearch中存储数据的行为就叫做索引(indexing),不过在索引之前,我们需要明确数据应该存储在哪里. 在elasticsearch中,文档归属于一种类型(type),而这些类型 ...
- python学习笔记——爬虫中提取网页中的信息
1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系 ...
- 【转】C# 的 IDisposable 接口
C# 的 IDisposable 接口 我在微软的团队快被微软 C# 里面的各种 IDisposable 对象给折腾疯了…… 故事比较长,先来科普一下.如果你没有用过 C#,IDisposable 是 ...
- Html5 canvas 绘制彩票走势图
因须要 要实现一个类似彩票走势图的功能,初次学Html5 ,非常多地方不明白,前段时间也发帖请教过这个问题.也是没给个明白说话,在网上搜了非常多,也没有实现的样例,今天细致研究了下.发现事实上也不是非 ...
- ios开发中用过的一些外部库总结 cocoapods list
下面几个库是在之前的一个ios app开发中使用过的一些外部库: 1. zbar :2. shakebox :3. processbar :4. tableviewcontroller :新版的sta ...
- javascript的崛起及其生态元素
随着web的流行,人们花在浏览器上的时间吸引了巨头们对浏览器的重视,继而几年前富客户端概念,一批富客户端技术的涌现,如silverlight, flex等,曾经风起云涌,最终都败给了html5 和 j ...
- Android数据库安全解决方案,使用SQLCipher
源码:http://files.cnblogs.com/android100/SQLCipherTest.rar 我们都知道,Android系统内置了SQLite数据库,并且提供了一整套的API用于对 ...
- 开始学习使用 Semantic UI
最近在找一个功能比较丰富的前端框架,之前一直使用的Bootstrap,感觉组件还是不够丰富,很多东西都需要不少自定义.于是就发现了 Semantic UI. 不过感觉网上相关的中文资料好少,官方网站( ...