# 네이버블로그에서 이사 (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 |