1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 前台js 使用 atob btoa进行转码加密 后台java代码解密

前台js 使用 atob btoa进行转码加密 后台java代码解密

时间:2023-01-31 12:57:10

相关推荐

前台js 使用 atob btoa进行转码加密 后台java代码解密

前提 后台代码抄过来的 侵删

保存一下方便以后使用

前台js

window.atob();

window.btoa();

后台

import java.io.UnsupportedEncodingException;

import .URLDecoder;

import .URLEncoder;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.apache.log4j.Logger;

/**

@author zxy

@date 8月24日 上午11:20:16

@Description : 字符串加密类

*/

public class BtoAAtoB {

private static Logger log = Logger.getLogger(“BtoAAtoB.class”);

private static String base64hash = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”;

public static boolean isMatcher(String inStr, String reg) {

Pattern pattern = pile(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 = new StringBuilder();

int i = 0;

int mod = 0;

int ascii;

int prev = 0;

while (i < inStr.length()) {

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("=");

}

return result.toString();

}

/**

atob method 逆转encode的思路即可

@param inStr

@return

*/

public static String atob(String inStr) {

if (inStr == null)

return null;

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

StringBuilder result = new StringBuilder();

int cur;

int prev = -1;

int mod;

int i = 0;

while (i < inStr.length()) {

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

}

return result.toString();

}

/**

加密字符串@return

*/

public static String encryption(String str) {

String encode;

try {

encode = URLEncoder.encode(str,“utf-8”);

encode=encode.replaceAll("\+", “%20”);//URLEncoder.encode 会将空格解释为+号

String btoa = BtoAAtoB.btoa(encode);

return btoa;

} catch (UnsupportedEncodingException e) {

log.info(“btoa加密函数出现错误。”);

}

return str;

}

/**

解密字符串@return

*/

public static String decrypt(String str) {

String atob = BtoAAtoB.atob(str);

try {

String decode = URLDecoder.decode(atob, “utf-8”);

return decode;

} catch (UnsupportedEncodingException e) {

log.info(“atob加密函数出现错误。”);

}

return str;

}

}

————————————————

版权声明:本文为CSDN博主「z793397795」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:/z793397795/article/details/108196422

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。