base64编码加解密有以下几种:
方法一:sun.misc包中的加解密方法(不推荐用这种方法)
import java.io.IOException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Base64Util {
public static String encrypt(byte[] data) {
return new BASE64Encoder().encode(data);
}
public static String decrypt(String data) throws IOException {
return new String(new BASE64Decoder().decodeBuffer(data));
}
public static void main(String[] args) throws IOException {
String data = "1234567890";
String result = Base64Util.encrypt(data.getBytes());
System.out.println(data +" 使用Base64编码的结果: "+result);
String result2 = Base64Util.decrypt(result);
System.out.println(result + "使用Base64解码的结果:" +result2);
}
}
方法二、使用commons-codec.jar
/*解密*/
public static byte[] decode(final byte[] bytes) {
return Base64.decodeBase64(bytes);
}
public static byte[] decode(String param) {
byte[] bytes=param.getBytes();
return Base64.decodeBase64(bytes);
}
/*加密*/
//参数为byte数组
public static String encode(final byte[] bytes) {
return BytesToHex.fromBytesToHex(Base64.encodeBase64(bytes));
}
//参数为字符串
public static String encode(String param) {
byte[] bytes=param.getBytes();
return BytesToHex.fromBytesToHex(Base64.encodeBase64(bytes));
}
方法三、反射
/***
* encode by Base64
*/
public static String encodeBase64(byte[]input) throws Exception{
Class clazz=Class.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
Method mainMethod= clazz.getMethod("encode", byte[].class);
mainMethod.setAccessible(true);
Object retObj=mainMethod.invoke(null, new Object[]{input});
return (String)retObj;
}
/***
* decode by Base64
*/
public static byte[] decodeBase64(String input) throws Exception{
Class clazz=Class.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
Method mainMethod= clazz.getMethod("decode", String.class);
mainMethod.setAccessible(true);
Object retObj=mainMethod.invoke(null, input);
return (byte[])retObj;
}
使用BC方式进行加密
public static String bouncyCastleEncodeBase64() {
byte[] encodeByte = org.bouncycastle.util.encoders.Base64.encode(str.getBytes());
return new String(encodeByte);
}
public static String bouncyCastleEncodeBase64(String encodeString) {
byte[] decodeByte = org.bouncycastle.util.encoders.Base64.decode(encodeString.getBytes());
return new String(decodeByte);
}
下面是byte数组转换为String,你也可以直接使用new String()进行直接转换。
public class BytesToHex {
public static String fromBytesToHex(byte[] resultBytes) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < resultBytes.length; i++) {
if (Integer.toHexString(0xFF & resultBytes[i]).length() == 1) {
builder.append("0").append(
Integer.toHexString(0xFF & resultBytes[i]));
} else {
builder.append(Integer.toHexString(0xFF & resultBytes[i]));
}
}
return builder.toString();
}
}