java base64编码源码
2011-12-27 16:54
295 查看
从c++翻译过来的代码,写的有点二! 能用,留此备份!
这里 static String strBaseAlp = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
是可以修改地,可以起到保密的作用吧!
源码如下:
public class Base64Ex {
static int CH_EMPTY = 0xFF;
static String strBaseAlp = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static char baseAlp[] = strBaseAlp.toCharArray();
/*********************************************************************************************************
* Base64编码
*
**********************************************************************************************************/
public static String base64enc(byte[] strdata) {
StringBuffer strReturn = new StringBuffer();
int iLen = strdata.length;
byte[] swiBuf = new byte[4];
int n;
int iLenM3 = iLen % 3;
int iLenD3 = iLen / 3;
int iLenD3p = iLenD3;
for (int i = 0; i < iLenD3p; i++) {
swiBuf[0] = (byte) (strdata[3 * i] >> 2); // 把第一个字符右移2位得到一个个目标字符
swiBuf[1] = (byte) (((strdata[3 * i]) << 4) & 0x30); // 把第一个字符左移四位,然后与0x30相与,
// 得到第二个目标字符的第5、6位
swiBuf[1] = (byte) (swiBuf[1] + (strdata[3 * i + 1] >> 4)); // 把第二个字符右移4位,然后与得到的目标5、6位相加
// 得到第二个目标字符
swiBuf[2] = (byte) (((strdata[3 * i + 1]) << 2) & 0x3C); // 把第二个字符左移2位,然后与0x3C相与,
// 得到第二个目标字符的第3、4、5、6位
swiBuf[2] = (byte) (swiBuf[2] + ((strdata[3 * i + 2]) >> 6)); // 把第三个字符右移6位,然后与得到的目标3、4、5、6
// 位相加,得到第三个目标字符
swiBuf[3] = (byte) ((strdata[3 * i + 2]) & 0x3F); // 第三个字符与0x3F相与,得到第四个目标字符
for (n = 0; n < 4; n++) { // 取得需要的Base64编码
strReturn.append(baseAlp[swiBuf
]);
}
}
// 对最后一个做处理
switch (iLenM3) // 对不足三个字符的编码处理
{
case 1:
swiBuf[0] = (byte) ((strdata[3*(iLenD3p+1)]) >> 2);
swiBuf[1] = (byte) (((strdata[3*(iLenD3p+1)]) << 4) & 0x30);
swiBuf[2] = '=';
swiBuf[3] = '=';
for (n = 0; n < 4; n++) {
if (swiBuf
== '=') {
strReturn.append('=');
} else {
strReturn.append(baseAlp[swiBuf
]);
}
}
break;
case 2:
swiBuf[0] = (byte) ((strdata[3*(iLenD3p+1)]) >> 2);
swiBuf[1] = (byte) (((strdata[3*(iLenD3p+1)]) << 4) & 0x30);
swiBuf[1] = (byte) (swiBuf[1] + ((strdata[3*(iLenD3p+1)+1]) >> 4));
swiBuf[2] = (byte) (((strdata[3*(iLenD3p+1)+1]) << 2) & 0x3C);
swiBuf[3] = '=';
for (n = 0; n < 4; n++) {
if (swiBuf
== '=') {
strReturn.append('=');
} else {
strReturn.append(baseAlp[swiBuf
]);
}
}
break;
default:
break;
}
return strReturn.toString();
}
/**********************************************************************************************************
* Base64解码
*
**********************************************************************************************************/
public static String base64dec( String strInput ) throws UnsupportedEncodingException
{
byte[] strData = strInput.getBytes("US-ASCII");
StringBuffer strReturn = new StringBuffer();
byte cTemp;
byte[] cBuf = new byte[3];
int cLen = strData.length;
if( ( cLen % 4 ) != 0 )
return null;
int aLen = cLen / 4;
for(int i = 0; i < aLen; i++ )
{
cTemp = GetB64Char( strData[4*i] );
cBuf[ 0 ] = (byte) (cTemp << 2);
cTemp = GetB64Char( strData[4*i +1] );
cBuf[ 0 ] = (byte) (cBuf[ 0 ] + ( cTemp >> 4 ));
cBuf[ 1 ] = (byte) (cTemp << 4);
cTemp = GetB64Char( strData[4*i +2] );
if( cTemp == CH_EMPTY )
{
strReturn.append( (char)cBuf[ 0 ] );
strReturn.append( (char)cBuf[ 1 ] );
return strReturn.toString();
}
else
{
cBuf[ 1 ] = (byte) (cBuf[ 1 ] + ( cTemp >> 2 ));
cBuf[ 2 ] = (byte) (cTemp << 6);
}
cTemp = GetB64Char( strData[4*i+3] );
if( cTemp == CH_EMPTY )
{
strReturn.append( (char)cBuf[ 0 ] );
strReturn.append( (char)cBuf[ 1 ] );
strReturn.append( (char)cBuf[ 2 ] );
return strReturn.toString();
}
else
{
cBuf[ 2 ] = (byte) (cBuf[ 2 ] + cTemp);
}
for(int n = 0; n < 3; n++ )
{
strReturn.append( (char)cBuf[ n ] );
}
}
return strReturn.toString();
}
// 获取Base64编码值
private static byte GetB64Char( byte ch )
{
byte n;
if( ch == '=' )
{
return (byte) CH_EMPTY;
}
else
{
for( n = 0; n < baseAlp.length; n++ )
{
if( ch == baseAlp[ n ] )
{
break;
}
}
return n;
}
}
}
这里 static String strBaseAlp = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
是可以修改地,可以起到保密的作用吧!
源码如下:
public class Base64Ex {
static int CH_EMPTY = 0xFF;
static String strBaseAlp = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static char baseAlp[] = strBaseAlp.toCharArray();
/*********************************************************************************************************
* Base64编码
*
**********************************************************************************************************/
public static String base64enc(byte[] strdata) {
StringBuffer strReturn = new StringBuffer();
int iLen = strdata.length;
byte[] swiBuf = new byte[4];
int n;
int iLenM3 = iLen % 3;
int iLenD3 = iLen / 3;
int iLenD3p = iLenD3;
for (int i = 0; i < iLenD3p; i++) {
swiBuf[0] = (byte) (strdata[3 * i] >> 2); // 把第一个字符右移2位得到一个个目标字符
swiBuf[1] = (byte) (((strdata[3 * i]) << 4) & 0x30); // 把第一个字符左移四位,然后与0x30相与,
// 得到第二个目标字符的第5、6位
swiBuf[1] = (byte) (swiBuf[1] + (strdata[3 * i + 1] >> 4)); // 把第二个字符右移4位,然后与得到的目标5、6位相加
// 得到第二个目标字符
swiBuf[2] = (byte) (((strdata[3 * i + 1]) << 2) & 0x3C); // 把第二个字符左移2位,然后与0x3C相与,
// 得到第二个目标字符的第3、4、5、6位
swiBuf[2] = (byte) (swiBuf[2] + ((strdata[3 * i + 2]) >> 6)); // 把第三个字符右移6位,然后与得到的目标3、4、5、6
// 位相加,得到第三个目标字符
swiBuf[3] = (byte) ((strdata[3 * i + 2]) & 0x3F); // 第三个字符与0x3F相与,得到第四个目标字符
for (n = 0; n < 4; n++) { // 取得需要的Base64编码
strReturn.append(baseAlp[swiBuf
]);
}
}
// 对最后一个做处理
switch (iLenM3) // 对不足三个字符的编码处理
{
case 1:
swiBuf[0] = (byte) ((strdata[3*(iLenD3p+1)]) >> 2);
swiBuf[1] = (byte) (((strdata[3*(iLenD3p+1)]) << 4) & 0x30);
swiBuf[2] = '=';
swiBuf[3] = '=';
for (n = 0; n < 4; n++) {
if (swiBuf
== '=') {
strReturn.append('=');
} else {
strReturn.append(baseAlp[swiBuf
]);
}
}
break;
case 2:
swiBuf[0] = (byte) ((strdata[3*(iLenD3p+1)]) >> 2);
swiBuf[1] = (byte) (((strdata[3*(iLenD3p+1)]) << 4) & 0x30);
swiBuf[1] = (byte) (swiBuf[1] + ((strdata[3*(iLenD3p+1)+1]) >> 4));
swiBuf[2] = (byte) (((strdata[3*(iLenD3p+1)+1]) << 2) & 0x3C);
swiBuf[3] = '=';
for (n = 0; n < 4; n++) {
if (swiBuf
== '=') {
strReturn.append('=');
} else {
strReturn.append(baseAlp[swiBuf
]);
}
}
break;
default:
break;
}
return strReturn.toString();
}
/**********************************************************************************************************
* Base64解码
*
**********************************************************************************************************/
public static String base64dec( String strInput ) throws UnsupportedEncodingException
{
byte[] strData = strInput.getBytes("US-ASCII");
StringBuffer strReturn = new StringBuffer();
byte cTemp;
byte[] cBuf = new byte[3];
int cLen = strData.length;
if( ( cLen % 4 ) != 0 )
return null;
int aLen = cLen / 4;
for(int i = 0; i < aLen; i++ )
{
cTemp = GetB64Char( strData[4*i] );
cBuf[ 0 ] = (byte) (cTemp << 2);
cTemp = GetB64Char( strData[4*i +1] );
cBuf[ 0 ] = (byte) (cBuf[ 0 ] + ( cTemp >> 4 ));
cBuf[ 1 ] = (byte) (cTemp << 4);
cTemp = GetB64Char( strData[4*i +2] );
if( cTemp == CH_EMPTY )
{
strReturn.append( (char)cBuf[ 0 ] );
strReturn.append( (char)cBuf[ 1 ] );
return strReturn.toString();
}
else
{
cBuf[ 1 ] = (byte) (cBuf[ 1 ] + ( cTemp >> 2 ));
cBuf[ 2 ] = (byte) (cTemp << 6);
}
cTemp = GetB64Char( strData[4*i+3] );
if( cTemp == CH_EMPTY )
{
strReturn.append( (char)cBuf[ 0 ] );
strReturn.append( (char)cBuf[ 1 ] );
strReturn.append( (char)cBuf[ 2 ] );
return strReturn.toString();
}
else
{
cBuf[ 2 ] = (byte) (cBuf[ 2 ] + cTemp);
}
for(int n = 0; n < 3; n++ )
{
strReturn.append( (char)cBuf[ n ] );
}
}
return strReturn.toString();
}
// 获取Base64编码值
private static byte GetB64Char( byte ch )
{
byte n;
if( ch == '=' )
{
return (byte) CH_EMPTY;
}
else
{
for( n = 0; n < baseAlp.length; n++ )
{
if( ch == baseAlp[ n ] )
{
break;
}
}
return n;
}
}
}
相关文章推荐
- JAVA Base64编码-源码及应用
- JAVA中Base64编码加密解密源码
- java安全技术-Base64编码与解码
- [Java学习] 将PDF格式文件转成二进制并生成Base64编码,将Base64编码转成PDF文件
- 我的Java开发学习之旅------>Base64的编码思想以及Java实现
- Java Base64图片加密解密源码注解
- 特效编辑器开发手记3——保存纹理到plist Base64编码与Zip压缩(上源码)
- java MD5 加密 Base64 编码
- 2017年最牛的Java编码套路【学习资料含源码】,免费领取就在今天!
- Base64编码算法(Basic编码)之iharder算法源码解析
- Java Base64编码类推荐
- Base64编码的java实现
- android Java BASE64编码和解码二:图片的编码和解码
- java 中使用base64编码和解码
- JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
- java base64编码的三种方式
- java base64 编码解码工具
- (java)Base64 图片编码&&解码
- JAVA将图片转为BASE64编码及反转方法
- java利用Base64编码和解码图片文件