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;
}
}