SpringBoot框架中URL参数如何进行Base64加密解密

xiaoxiao2021-02-28  69

springboot技术学习 https://www.itkc8.com

SpringBoot框架中URL参数如何进行Base64加密解密

首先给大家介绍一下Java中的Base64加密,其实Base64不是真正的加密,只是对字符串进行编码解码而已。主要作用是不让人一眼就可以看出字符串是什么值,有什么作用。

 

Java实现Base64有好多种方法,我这里就介绍其中的两种方法。要是大家有兴趣的话可以再去了解一下其他的几种方法,我这里就不多介绍了。

第一种方法:利用Java中sun.misc.BASE64Encoder()方法进行字符串编码,下面看具体实现例子:

[java] view plain copy

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()方法进行字符串的编码工作。下面看具体例子:

[java] view plain copy

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编码,解码文件代码:

[javascript] view plain copy

/**  *  * 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] view plain copy

<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参数的解码,下面看具体代码示例:

[java] view plain copy

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.运行界面:

 

springboot技术学习 https://www.itkc8.com

转载请注明原文地址: https://www.6miu.com/read-28954.html

最新回复(0)