原文地址: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的倍数)。因此需要二进制的相互转换

代码如下:

  1. package p;
  2. import java.security.SecureRandom;
  3. import javax.crypto.Cipher;
  4. import javax.crypto.KeyGenerator;
  5. import javax.crypto.SecretKey;
  6. public class AEStest {
  7. public static void main(String[] args) throws Exception {
  8. // TODO Auto-generated method stub
  9. String str = "user=admin&pwd=admin";
  10. String key = "12345678";
  11. String encrytStr;
  12. byte[] encrytByte;
  13. byte[] byteRe = enCrypt(str,key);
  14. //加密过的二进制数组转化成16进制的字符串
  15. encrytStr = parseByte2HexStr(byteRe);
  16. System.out.println("加密后:"+encrytStr);
  17. //加密过的16进制的字符串转化成二进制数组
  18. encrytByte = parseHexStr2Byte(encrytStr);
  19. System.out.println("解密后:"+deCrypt(encrytByte,key));
  20. }
  21. /**
  22. * 加密函数
  23. * @param content   加密的内容
  24. * @param strKey    密钥
  25. * @return          返回二进制字符数组
  26. * @throws Exception
  27. */
  28. public static byte[] enCrypt(String content,String strKey) throws Exception{
  29. KeyGenerator keygen;
  30. SecretKey desKey;
  31. Cipher c;
  32. byte[] cByte;
  33. String str = content;
  34. keygen = KeyGenerator.getInstance("AES");
  35. keygen.init(128, new SecureRandom(strKey.getBytes()));
  36. desKey = keygen.generateKey();
  37. c = Cipher.getInstance("AES");
  38. c.init(Cipher.ENCRYPT_MODE, desKey);
  39. cByte = c.doFinal(str.getBytes("UTF-8"));
  40. return cByte;
  41. }
  42. /** 解密函数
  43. * @param src   加密过的二进制字符数组
  44. * @param strKey  密钥
  45. * @return
  46. * @throws Exception
  47. */
  48. public static String deCrypt (byte[] src,String strKey) throws Exception{
  49. KeyGenerator keygen;
  50. SecretKey desKey;
  51. Cipher c;
  52. byte[] cByte;
  53. keygen = KeyGenerator.getInstance("AES");
  54. keygen.init(128, new SecureRandom(strKey.getBytes()));
  55. desKey = keygen.generateKey();
  56. c = Cipher.getInstance("AES");
  57. c.init(Cipher.DECRYPT_MODE, desKey);
  58. cByte = c.doFinal(src);
  59. return new String(cByte,"UTF-8");
  60. }
  61. /**2进制转化成16进制
  62. * @param buf
  63. * @return
  64. */
  65. public static String parseByte2HexStr(byte buf[]) {
  66. StringBuffer sb = new StringBuffer();
  67. for (int i = 0; i < buf.length; i++) {
  68. String hex = Integer.toHexString(buf[i] & 0xFF);
  69. if (hex.length() == 1) {
  70. hex = '0' + hex;
  71. }
  72. sb.append(hex.toUpperCase());
  73. }
  74. return sb.toString();
  75. }
  76. /**将16进制转换为二进制
  77. * @param hexStr
  78. * @return
  79. */
  80. public static byte[] parseHexStr2Byte(String hexStr) {
  81. if (hexStr.length() < 1)
  82. return null;
  83. byte[] result = new byte[hexStr.length()/2];
  84. for (int i = 0;i< hexStr.length()/2; i++) {
  85. int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
  86. int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
  87. result[i] = (byte) (high * 16 + low);
  88. }
  89. return result;
  90. }
  91. }

[转]java利用AES实现URL的参数加密的更多相关文章

  1. 利用MVC的过滤器实现url的参数加密和解密

    最近在与一个IOS应用做接口对接,之前一直都没有遇到什么很大的问题,但是有一天发现可以通过软件解析app的url,然后直接通过url的拼接修改接口数据,这一下使得数据的安全性和准确性都降低了,于是就想 ...

  2. Java利用MessageDigest提供的MD5算法加密字符串或文件

    MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了 ...

  3. ASP.NET - URL中参数加密解密操作

    效果: 代码: using System; using System.Text; using System.IO; using System.Security.Cryptography; public ...

  4. js获取url中参数名也参数值

    要撮利用js获取url中参数名也参数值这个不多见了,但我今天需要这样操作,下面我来给大家介绍一下具体的实例方法.   在已知参数名的情况下,获取参数值,使用正则表达式能很容易做到. js的实现方法如下 ...

  5. (转)Java程序利用main函数中args参数实现参数的传递

    Java程序利用main函数中args参数实现参数的传递 1.运行Java程序的同时,可以通过输入参数给main函数中的接收参数数组args[],供程序内部使用!即当你在Java命令行后面带上参数,J ...

  6. Liferay中利用URL传参数

    业务场景:现在有一个新闻系统,有两个页面,A是新闻列表页面/web/guest/home,B是新闻的详情页面/web/guest/newsview. 业务逻辑为:在A页面中,点击新闻的标题进入B页面, ...

  7. IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数

    因为项目需要解析URL当中参数的部分,在网上搜索了一下都没有相关的资料. 然后就自己写了一个 其实我就是通过正则表达式来处理URL 进行解析的 好了直接上代码吧 也是非常的简单,大家拷贝过去就可以使用 ...

  8. vue-router 利用url传递参数

    vue-router 利用url传递参数 :冒号的形式传递参数  在路由配置文件里以:冒号的形式传递参数,这就是对参数的绑定. 1. 在配置文件里以冒号的形式设置参数.我们在/src/router/i ...

  9. Vue-router 第5节 vue-router利用url传递参数

    Vue-router 第5节 vue-router利用url传递参数 目录 Vue-router 第5节 vue-router利用url传递参数 第5节 vue-router利用url传递参数 冒号的 ...

随机推荐

  1. 如何调试makefile变量

    六.七年前写过一篇<跟我一起写Makefile>,直到今天,还有一些朋友问我一些Makefile的问题,老实说,我有一段时间没有用Makefile了,生疏了.回顾,这几年来大家问题我的问题 ...

  2. 解决WIN32窗口不响应WM_LBUTTONDBLCLK消息

    原文链接: http://www.cnblogs.com/xukaixiang/archive/2012/05/27/2520059.html 今天在做一个软件时,发现win32创建的窗体不能响应WM ...

  3. Asp.net2.0之自定义控件ImageButton

    控件模仿winform中的button,可以支持图片和文字.可以选择执行服务器端程序还是客户端程序,还有一些简单的设置. 不足的是不支持样式,下次希望可以写一个工具条. 以下就是代码 以下为引用的内容 ...

  4. [转]Github 简明教程

    如果你是一枚Coder,但是你不知道Github,那么我觉的你就不是一个菜鸟级别的Coder,因为你压根不是真正Coder,你只是一个Code搬运工. 但是你如果已经在读这篇文章了,我觉的你已经知道G ...

  5. 使用 sqlyog 导入导出数据显示 lost connection to mysql server during query

    mysql中经常需要备份数据,在使用 sqlyog 进行备份数据库为转储文件,然后在其他数据库中导入发生 lost connection 经过查询大量资料是数据库配置的 max_allowed_pac ...

  6. 小程序踩过的一个小坑---解析二维码decodeURIComponent() url解码

    因为我们需要用户扫码进入小程序,每一个货柜都有一个对应的二维码,当然每个二维码里的信息也不一样.用户扫码进入小程序之后,二维码的信息会以参数q带进去,而我们只能在onLoad事件中拿到这个参数, 但是 ...

  7. Windows平台JDK安装

    原文链接:http://android.eoe.cn/topic/android_sdk 下载Java的开发包JDK JDK有好几个类型版本,我们只需要选择Java SE类型的版本就行了.进入网页:h ...

  8. Android 开发工具介绍-SDK工具和平台工具

    原文链接:http://android.eoe.cn/topic/android_sdk Android的SDK提供各种工具可以帮你为Android平台开发移动应用程序.这些工具被分类成两组:SDK工 ...

  9. Android基础知识之屏幕兼容模式

    原文:http://android.eoe.cn/topic/android_sdk 注意:如果你在低于安卓3.0的版本上进行应用开发,但其在更大屏幕的设备(比如平板电脑)上显示正常时,你就需要禁用屏 ...

  10. 快学Scala习题解答—第四章 映射和元组

    4 映射和元组  4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作  ,"gun"->18 ...