package mains;
import java.util.ArrayList;
import java.util.List;
import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64DecoderStream;
import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64EncoderStream;
import sun.misc.BASE64Encoder;
/***
* Base64位加密算法.
* @author Administrator xlaohe1
*
*/
public class Base64Test {
/*
Base64 使用US-ASCII子集的64个字符,即大小写的26个英文字母,0-9,+,/。
编码总是基于3个字符,每个字符用8位二进制表示,因此一共24位,再分为4四组,每组6位,表示一个Base64的值。
Base64值为0就是A,为27的就是b。这样,每3个字符产生4位的Base64字符。如果被加密的字符串每3个一组,还剩1或2个字符,
使用特殊字符"="补齐Base64的4字。
*/
private final static char[] BASE64ARR = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I','J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i','j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
};
public static void main(String[] args) {
String src = "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.";
StringBuffer sb = new StringBuffer();
byte[] buf = src.getBytes();
for(byte b : buf) {
sb.append(to8len(Integer.toBinaryString(b&0xff), 8));
}
String bin = toNstr(sb.toString(), 6, "0");
StringBuffer newBuf = new StringBuffer(bin.length() / 6);
for(int i = 0, len = bin.length(); i < len; i += 6) {
newBuf.append(BASE64ARR[Integer.parseInt(bin.substring(i, i + 6), 2)]);
}
//System.out.println(toNstr(newBuf.toString(), 3, "="));
System.out.println(newBuf.toString());
}
private static String to8len(String src, int n) {
if(null == src || "".equals(src)) return "";
if(src.length() >= n) return src;
return to8len("0" + src, n);
}
private static String toNstr(String src, int mod, String c) {
if(src.length() % mod == 0) return src;
StringBuffer sb = new StringBuffer();
sb.append(src);
int i = 0, len = mod - src.length() % mod;
while(i ++ < len) {
sb.append(c);
}
return sb.toString();
}
}
Base64位java加密算法
最新推荐文章于 2023-02-07 13:51:31 发布