客户端Base64加密,解密

面试题:以前的项目有没有用到:“网络传输加密” Base64
话不多说上代码:`package com.xxx.client;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;

public class Ticket {

private static int random() {
	return (int) (100 * Math.random() + 1);
}

/**
 * 将字符串字节按位异或。
 * @param str 字符串
 * @param num 异或数
 * @return
 */
private static String xor(String str, int num) {
	StringBuilder result = new StringBuilder();
	for (int i = 0; i < str.length(); i++) {
		int charVal = str.charAt(i);
		charVal ^= num;
		result.append((char) charVal);
	}
	return result.toString();
}

/**
 * Base64加密
 * @param ticket
 * @return
 */
public static String encode(String ticket) {
	ticket = StringUtils.reverse(Base64.encodeBase64String(ticket.getBytes()));
	Integer rand = random();
	// 按位异或
	ticket = xor(ticket, rand % 32);
	// rand encode
	String encodeRand = Base64.encodeBase64String(String.valueOf(rand).getBytes());
	// encode(encode(rand) + ';' + encode(ticket))
	String encodeTicket = Base64.encodeBase64String(ticket.getBytes());
	String encode = encodeRand + ";" + encodeTicket;
	return Base64.encodeBase64String(encode.getBytes());
}

/**
 * Base64解密
 * @param userKey
 * @return
 */
public static String decode(String userKey) {
	userKey = new String(Base64.decodeBase64(userKey));
	String[] strs = userKey.split(";");
	// 获取 rand
	int rand = Integer.parseInt(new String(Base64.decodeBase64(strs[0])));
	// 获取 encode
	String ticket = new String(Base64.decodeBase64(strs[1]));
	// 按位异或
	ticket = xor(ticket, rand % 32);
	return new String(Base64.decodeBase64(StringUtils.reverse(ticket)));
}

public static void main(String[] args) {
	String userKey = "admin-TEST";
	String encode = encode(userKey);
	System.out.println("E: " + encode);
	System.out.println("D: " + decode(encode));
}

}`

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值