# 네이버블로그에서 이사 (http://blog.naver.com/rkdmfql1540)
Base64라는 암호화 복호화 관련 자바 코드가 있다.
이것은 입력된 byte 문자열을 24bit 단위로 잘라서 다시 6bit씩 잘라서 표에 따라 문자로 변환하는 방법이다..
기본적으로
import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;예전 jdk버전에서는 제공하였으나 안전상에 이유로 최신 jdk에서는 지원을 하지 않고 있다. 그래서 Base64로 암호화된 문자열을 복화하하거나 Base64로 암호화하려면 다음의 소스를 이용하면 쉽게 사용할 수 있다.
public class Base64 {
private static byte[] encodeData;
private static String charSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ;
static {
encodeData = new byte[64];
for (int i = 0; i < 64; i++) {
byte c = (byte) charSet.charAt(i);
encodeData[i] = c;
}
}
public static String encode(String s) {
return encode(s.getBytes());
}
public static String encode(byte[] src) {
return encode(src, 0, src.length);
}
public static String encode(byte[] src, int start, int length) {
byte[] dst = new byte[(length + 2) / 3 * 4 + length / 72];
int x = 0;
int dstIndex = 0;
int state = 0; // which char in pattern
int old = 0; // previous byte
int len = 0; // length decoded so far
int max = length + start;
for (int srcIndex = start; srcIndex < max; srcIndex++) {
x = src[srcIndex];
switch (++state) {
case 1:
dst[dstIndex++] = encodeData[(x >> 2) & 0x3f];
break;
case 2:
dst[dstIndex++] = encodeData[((old << 4) & 0x30) | ((x >> 4) & 0xf)];
break;
case 3:
dst[dstIndex++] = encodeData[((old << 2) & 0x3C) | ((x >> 6) & 0x3)];
dst[dstIndex++] = encodeData[x & 0x3F];
state = 0;
break;
}
old = x;
if (++len >= 72) {
dst[dstIndex++] = (byte) '\n';
len = 0;
}
}
switch (state) {
case 1:
dst[dstIndex++] = encodeData[(old << 4) & 0x30];
dst[dstIndex++] = (byte) '=';
dst[dstIndex++] = (byte) '=';
break;
case 2:
dst[dstIndex++] = encodeData[(old << 2) & 0x3c];
dst[dstIndex++] = (byte) '=';
break;
}
return new String(dst);
}
public static byte[] decode(String s) {
int end = 0; // end state
if (s.endsWith("=")) {
end++;
}
if (s.endsWith("==")) {
end++;
}
int len = (s.length() + 3) / 4 * 3 - end;
byte[] result = new byte[len];
int dst = 0;
try {
for (int src = 0; src < s.length(); src++) {
int code = charSet.indexOf(s.charAt(src));
if (code == -1) {
break;
}
switch (src % 4) {
case 0:
result[dst] = (byte) (code << 2);
break;
case 1:
result[dst++] |= (byte) ((code >> 4) & 0x3);
result[dst] = (byte) (code << 4);
break;
case 2:
result[dst++] |= (byte) ((code >> 2) & 0xf);
result[dst] = (byte) (code << 6);
break;
case 3:
result[dst++] |= (byte) (code & 0x3f);
break;
}
}
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
return result;
}
}'Java & Spring' 카테고리의 다른 글
| [java] Spring boot 손쉬운 test 코드 작성하기 (0) | 2017.06.13 |
|---|---|
| [Java] 자바 8 Default method 정리 (0) | 2017.04.17 |
| 자바 Map을 Json으로 변환시 키로 정렬하기 (0) | 2017.03.11 |
| mysql에서 batch insert가 작동하지 않는 경우 해결 방법 (0) | 2017.03.11 |
| Spring boot 에서 ehcache 사용하기 (0) | 2017.03.11 |