js 加密url java_JS前端加密 后端java解密

package com.fudian.project.system.utils;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;

import java.net.URLEncoder;/**

* Window.atob 加解密

* @author ZYGisComputer*/public class BtoaEncode {

public staticvoidmain(String[] args) {

String admin= BtoaEncode.encryption("admin");

System.out.println(admin);

System.out.println(BtoaEncode.decrypt(admin));

}

private static String base64hash= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

public staticbooleanisMatcher(String inStr, String reg) {

Pattern pattern=Pattern.compile(reg);

Matcher matcher=pattern.matcher(inStr);if(matcher.matches()) {return true;

}return false;

}/**

* btoa method

* @param inStr

* @return*/public static String btoa(String inStr) {if (inStr == null || isMatcher(inStr, "([^\\u0000-\\u00ff])")) {return null;

}

StringBuilder result= newStringBuilder();int i = 0;int mod = 0;intascii;int prev = 0;while (i

ascii=inStr.charAt(i);

mod= i % 3;switch(mod) {case 0:

result.append(String.valueOf(base64hash.charAt(ascii>> 2)));break;case 1:

result.append(String.valueOf(base64hash.charAt((prev& 3) << 4 | (ascii >> 4))));break;case 2:

result.append(String.valueOf(base64hash.charAt((prev& 0x0f) << 2 | (ascii >> 6))));

result.append(String.valueOf(base64hash.charAt(ascii& 0x3f)));break;

}

prev=ascii;

i++;

}if (mod == 0) {

result.append(String.valueOf(base64hash.charAt((prev& 3) << 4)));

result.append("==");

}else if (mod == 1) {

result.append(String.valueOf(base64hash.charAt((prev& 0x0f) << 2)));

result.append("=");

}returnresult.toString();

}/**

* atob method 逆转encode的思路即可

* @param inStr

* @return*/public static String atob(String inStr) {if (inStr == null)return null;

inStr= inStr.replaceAll("\\s|=", "");

StringBuilder result= newStringBuilder();intcur;int prev = -1;intmod;int i = 0;while (i

cur=base64hash.indexOf(inStr.charAt(i));

mod= i % 4;switch(mod) {case 0:break;case 1:

result.append(String.valueOf((char) (prev << 2 | cur >> 4)));break;case 2:

result.append(String.valueOf((char) ((prev & 0x0f) << 4 | cur >> 2)));break;case 3:

result.append(String.valueOf((char) ((prev & 3) << 6 |cur)));break;

}

prev=cur;

i++;

}returnresult.toString();

}/**

* 加密字符串

* @return*/public static String encryption(String str) {

String encode;try{

encode= URLEncoder.encode(str,"utf-8");//URLEncoder.encode 会将空格解释为+号

encode=encode.replaceAll("\\+", "%20");

String btoa=BtoaEncode.btoa(encode);returnbtoa;

}catch(UnsupportedEncodingException e) {

System.out.println("btoa加密函数出现错误。");

}returnstr;

}/**

* 解密字符串

* @return*/public static String decrypt(String str) {

String atob=BtoaEncode.atob(str);try{

String decode= URLDecoder.decode(atob, "utf-8");returndecode;

}catch(UnsupportedEncodingException e) {

System.out.println("atob加密函数出现错误。");

}returnstr;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值