今天给大家介绍一下SpringBoot框架中URL参数如何进行Base64加密解密
2016-09-27 21:42
836 查看
今天给大家介绍一下SpringBoot框架中URL参数如何进行Base64加密解密
首先给大家介绍一下Java中的Base64加密,其实Base64不是真正的加密,只是对字符串进行编码解码而已。主要作用是不让人一眼就可以看出字符串是什么值,有什么作用。Java实现Base64有好多种方法,我这里就介绍其中的两种方法。要是大家有兴趣的话可以再去了解一下其他的几种方法,我这里就不多介绍了。
第一种方法:利用Java中sun.misc.BASE64Encoder()方法进行字符串编码,下面看具体实现例子:
package example.encrypt; import org.apache.commons.codec.binary.Base64; import org.springframework.util.Assert; import sun.plugin2.util.SystemUtil; import java.io.IOException; /** * Created by crj on 2016/9/27. */ public class Base64Encrypt { /** * 编码 * * @param bstr * @return String */ public static String encode(byte[] bstr) { return new sun.misc.BASE64Encoder().encode(bstr); } /** * 解码 * * @param str * @return string */ public static byte[] decode(String str) { byte[] bt = null; try { sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder(); bt = decoder.decodeBuffer(str); } catch (IOException e) { e.printStackTrace(); } return bt; } public static void main(String[] args) { String base64String = "whuang123"; Base64Encrypt base64=new Base64Encrypt(); String str1=base64.encode(base64String.getBytes()); System.out.println("str1:"+str1); String str2=new String(base64.decode(str1)); System.out.println("str2:"+str2); } }第二种方法:利用Java中Base64.encodeBase64()方法进行字符串的编码工作。下面看具体例子:
package example.encrypt; import org.apache.commons.codec.binary.Base64; import org.springframework.util.Assert; import sun.plugin2.util.SystemUtil; import java.io.IOException; public class Base64Encrypt { public static void main(String[] args) { String base64String = "whuang123"; byte[] result1= Base64.encodeBase64(base64String.getBytes()); String str11=new String(result1); byte[] result2 = Base64.decodeBase64(result1); String str12=new String(result2); System.out.println(str11+"-------"+str12); } }Java中对字符串的base64编码我就介绍这两种,其他的大家可以自己去搜索一下。
不过要实现URL参数加密单单在Java端进行字符串base64编码是不够的,还需要在在前台利用js实现base64编码才可以。
下面将给出一个例子:前台对URL参数进行base64编码,后台利用Java中Base64进行解码,并打印数据在界面上面。下面看具体代码的实现:
1.js中对字符串进行base64编码,解码文件代码:
/** * * Base64 encode / decode * * @author haitao.tu * @date 2010-04-26 * @email tuhaitao@foxmail.com * */ function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding this.encode = function (input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = _utf8_encode(input); while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); } return output; } // public method for decoding this.decode = function (input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); while (i < input.length) { enc1 = _keyStr.indexOf(input.charAt(i++)); enc2 = _keyStr.indexOf(input.charAt(i++)); enc3 = _keyStr.indexOf(input.charAt(i++)); enc4 = _keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } } output = _utf8_decode(output); return output; } // private method for UTF-8 encoding _utf8_encode = function (string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; } // private method for UTF-8 decoding _utf8_decode = function (utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0; while ( i < utftext.length ) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i+1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; } }2.创建一个base64.html页面,下面看具体代码实现:
<html> <head> <meta charset="utf-8"/> <title>base64加密</title> <script type="text/javascript" src="/MavenTest/js/base64.js"></script> <script type="text/javascript"> var b = new Base64(); var str1 = b.encode("admin"); console.log("base64 encode"+str1); var str2 = b.encode("guangzhou"); console.log("base64 encode"+str2); // //解密 // str = b.decode(str); // console.log("base64 decode"+str); function buttonFuc() { var condition="name="+str1+"&address="+str2; window.location.href="/MavenTest/testpage/base64test?"+condition; }; </script> </head> <button onclick="buttonFuc()">click me will format into new html</button> <body> </body> </html>3.在控制器中实现URL参数的解码,下面看具体代码示例:
package example.controller; import org.apache.catalina.connector.Request; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringEscapeUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.Iterator; import java.util.Map; import java.util.Set; @Controller @RequestMapping("/testpage") public class TestController { @RequestMapping("/Base64") public String base64(){ return "testpage/Base64"; } @RequestMapping("/base64test") @ResponseBody public String base64test(HttpServletRequest request){ String address=request.getParameter("amp;address"); String name=request.getParameter("name"); String convStr = StringEscapeUtils.unescapeHtml4("&name=1009"); System.out.println("base64传输前"); System.out.println("name:"+name+" address:"+address); System.out.println("base64取值后"); byte[] result1 = Base64.decodeBase64(name); byte[] result2 = Base64.decodeBase64(address); String str1=new String(result1); String str2=new String(result2); System.out.println("name:"+str1+" address:"+str2); String result="name:"+str1+" address:"+str2; return result; } }这里有个问个要和大家解释一下,就是在window.location.href中&需要转义成&否则编译通不过。因为我用的是SpringBoot框架,但是不知道要如何实现对转义的URL进行参数获取。所以我只能利用传统的getParameter方法进行获取了。如果有谁知道SpringBoot中怎么对URL转义词进行反转,例如把&变成&。请一定要告诉我,谢谢呀!!
4.运行界面:
如果大家想要源代码或者对博客有啥异议都可以加我QQ:208017534 欢迎打扰哦!!!
相关文章推荐
- MyEclipse 10 for mac配置JDK1.6
- (笔记)Spring实战_征服数据库(3)_在Spring中使用JDBC
- Spring-使用注解方式装配对象
- java中定义“全局变量”的方法【菜鸟学java】
- Struts2 入门(二) 之 配置文件中的 Action 元素
- Spring学习笔记(二)后处理器与AOP
- Struts2 入门(一) 之 控制器与执行步骤
- Java之 byte[]转String问题
- 用户登录相关问题
- Java web video 视频开发
- Java之 无符号类型是怎么回事
- java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符 分号问题
- 搭建Dubbo+Myeclipse2015+Maven3.3.1的过程遇到问题集锦
- 02.Spring Ioc 容器 - 创建
- Struts2与OGNL表达式
- 使用Spring注解注入属性
- SpringAOP使用入门,如何对自定义的注解进行切面编程
- Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
- java.lang.Class.getDeclaredMethod()方法
- PAT 乙级 1058 选择题(20) Java版