java实现base64编码


import java.util.ArrayList;
import java.util.List;

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

public class MyBase64 {

public static void main(String[] args) {
// TODO Auto-generated method stub
// char c = '0';
// int i = (int)c;
// System.out.println(i);
// System.out.println(Integer.toBinaryString(i));

String s = "stringad";
System.out.println(encode(s));
System.out.println(encode(s.getBytes()));
System.out.println(encode2(s.getBytes()));
System.out.println(encode3(s.getBytes()));

//System.out.println(convertBinaryString2Int("10"));
}

public static String encode(String str){
char[] base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
char[] cs = str.toCharArray();
StringBuilder sb = new StringBuilder();
for(char c: cs){
String bin = Integer.toBinaryString((int)c);
System.out.println("bin: "+bin);
while(bin.length()<8){
bin = "0"+bin;
}
sb.append(bin);
}
System.out.println("sb: "+sb);
List<String> list = new ArrayList<String>();
String temp = sb.toString();
while(temp.length()>6){
String s = temp.substring(0,6);
temp = temp.substring(6,temp.length());
list.add(s);
}
while(temp.length()<6){
temp+="0";
}
list.add(temp);
String result = "";
for(String s:list){
//System.out.println(s);
int num = convertBinaryString2Int(s);
System.out.print(num+" ");
result += base[num]+"";

}
System.out.println();
if(result.length()%3==1){
result+="==";
}
if(result.length()%3==2){
result+="=";
}
return result;
}

public static int convertBinaryString2Int(String str){
int sum = 0;
for(int i= str.length()-1;i>=0;i--){
Integer num = Integer.parseInt(str.charAt(i)+"");
sum += num * Math.pow(2, str.length()-1-i);
}
return sum;
}

/**
* 编码
* @param bstr
* @return String
*/
public static String encode(byte[] bstr){
return new sun.misc.BASE64Encoder().encode(bstr);
}

/**
* 二进制数据编码为BASE64字符串
*
* @param bytes
* @return
* @throws Exception
*/
public static String encode2(final byte[] bytes) {
return new String(Base64.encodeBase64(bytes));
}

public static String encode3(final byte[] bytes) {
return new String(java.util.Base64.getEncoder().encode(bytes));
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值