base64加密解密util
1、为什么要使用Base 64
Base 64主要用途不是加密,而是把一些二进制数转成普通字符,
方便在网络上传输。 由于一些二进制字符在传输协议中属于控制字符,不能直接传送,所以需要转换一下才可以。由于某些系统中只能使用ASCII字符,Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,Base64特别适合在http,mime协议下快速传输数据。比如网络中图片的传输。
Base64,并非安全领域下的加密解密算法。虽然经常遇到所谓的base64的加密解密。但base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是方式初级又简单。
2、Base 64 原理
Base64编码方法,要求把每三个8Bit的字节转换为四个6Bit的字节,其中,转换之后的这四个字节中每6个有效bit为是有效数据,空余的那两个 bit用0补上成为一个字节。因此Base64所造成数据冗余不是很严重,Base64是当今比较流行的编码方法,因为它编起来速度快而且简单。
工具类
package com.base64.util;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* 加密解密工具
* @auther
* @create
*/
public class EncryptUtil {
public static void main(String[] args) {
for (int i = 0; i < 1000; i++){
System.out.println("CG" + getlinkNo() + new SimpleDateFormat("yyyyMMdd").format(new Date()) + i);
}
}
/**
* 使用Base64进行加密
* @param res 密文
* @return
*/
public static String base64Encode(String res) {
return Base64.encode(res.getBytes());
}
/**
* 使用Base64进行解密
* @param res
* @return
*/
public static String base64Decode(String res) {
return new String(Base64.decode(res));
}
/**
* 生成6位不重复的编码
* @return
*/
public static String getlinkNo() {
String linkNo = "";
// 用字符数组的方式随机
String model = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] m = model.toCharArray();
for (int j = 0; j < 6; j++) {
char c = m[(int) (Math.random() * 36)];
// 保证六位随机数之间没有重复的
if (linkNo.contains(String.valueOf(c))) {
j--;
continue;
}
linkNo = linkNo + c;
}
return linkNo;
}
}
controller 测试
package com.base64;
import com.base64.util.EncryptUtil;
public class Controller {
public static void main(String[] args) {
String oldPassWord ="123456";
EncryptUtil.base64Encode(oldPassWord);
System.out.println("加密后密码" + EncryptUtil.base64Encode(oldPassWord));
String twoPassWord = EncryptUtil.base64Encode(oldPassWord);
EncryptUtil.base64Decode(twoPassWord);
System.out.println("解密后密码" + EncryptUtil.base64Decode(twoPassWord));
}
}