求助,用JAVA写base64的decode和encode方法,不用SUN的包
现在想写一个base64的decode和encode方法,
我在J2EE下面看到了一个org\apache\catalina\util\Base64 的类
我想直接用这个类是不是就可以做base64的转换,
代码中加入
import org.apache.catalina.util.*;
public class Base64Code {
private Base64Code() {
}
public static String encode( String s ) {
String str = "test ";
str = Base64.encode( s.getBytes() ).toString();
return str;
}
}
编译没有问题,为什么执行的时候总是报java.lang.NoClassDefFoundError的错呢。
求助,如果不用 org\apache\catalina\util\Base64,可否用其他实现BASE64转换的方法。
谢谢。
[解决办法]
import java.lang.*;
import java.io.*;
public class Base64 {
private static char[] base64EncodeChars = new char[] {
'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 ', '+ ', '/ ' };
private static byte[] base64DecodeChars = new byte[] {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 };
public static String encode(byte[] data) {
StringBuffer sb = new StringBuffer();
int len = data.length;
int i = 0;
int b1, b2, b3;
while (i < len) {
b1 = data[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[b1 > > > 2]);
sb.append(base64EncodeChars[(b1 & 0x3) < < 4]);
sb.append( "== ");
break;
}
b2 = data[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[b1 > > > 2]);
sb.append(base64EncodeChars[((b1 & 0x03) < < 4) | ((b2 & 0xf0) > > > 4)]);
sb.append(base64EncodeChars[(b2 & 0x0f) < < 2]);
sb.append( "= ");
break;
}
b3 = data[i++] & 0xff;
sb.append(base64EncodeChars[b1 > > > 2]);
sb.append(base64EncodeChars[((b1 & 0x03) < < 4) | ((b2 & 0xf0) > > > 4)]);
sb.append(base64EncodeChars[((b2 & 0x0f) < < 2) | ((b3 & 0xc0) > > > 6)]);
sb.append(base64EncodeChars[b3 & 0x3f]);
}
return sb.toString();
}
public static byte[] decode(String str) throws UnsupportedEncodingException {
StringBuffer sb = new StringBuffer();
byte[] data = str.getBytes( "US-ASCII ");
int len = data.length;
int i = 0;
int b1, b2, b3, b4;
while (i < len) {
/* b1 */
do {
b1 = base64DecodeChars[data[i++]];
} while (i < len && b1 == -1);
if (b1 == -1) break;
/* b2 */
do {
b2 = base64DecodeChars[data[i++]];
} while (i < len && b2 == -1);
if (b2 == -1) break;
sb.append((char)((b1 < < 2) | ((b2 & 0x30) > > > 4)));
/* b3 */
do {
b3 = data[i++];
if (b3 == 61) return sb.toString().getBytes( "ISO-8859-1 ");
b3 = base64DecodeChars[b3];
} while (i < len && b3 == -1);
if (b3 == -1) break;
sb.append((char)(((b2 & 0x0f) < < 4) | ((b3 & 0x3c) > > > 2)));
/* b4 */
do {
b4 = data[i++];
if (b4 == 61) return sb.toString().getBytes( "ISO-8859-1 ");
b4 = base64DecodeChars[b4];
} while (i < len && b4 == -1);
if (b4 == -1) break;
sb.append((char)(((b3 & 0x03) < < 6) | b4));
}
return sb.toString().getBytes( "ISO-8859-1 ");
}
}
[解决办法]
不好意思哈,问一下Base64Encode和Base64Decode是干啥用的,能给解释一下吗
[解决办法]
不能算是加密,只是编码,为了能够顺利通过7位网关发送8位数据
[解决办法]
up