일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
- MFC
- WebLogic
- 전자정부프레임워크
- JDOM
- PLSQL
- oracle
- Google Map
- Ajax
- tomcat
- Eclipse
- rowspan
- Spring
- 가우스
- node.js
- swingx
- jsr 296
- PHP
- dock
- Struts
- sencha touch
- phonegap
- 선택적조인
- appspresso
- Android
- iBATIS
- JSON
- jQuery
- GPS
- MySQL
- ibsheet
- Today
- Total
Where The Streets Have No Name
Base64 Encoding & Decoding 본문
ex1) Java Package
/*
* Base64Utils.java
*
* Created on 2007년 10월 16일 (화), 오후 2:22
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package fuel.Util;
import sun.misc.*;
import java.io.*;
/**
*
* @author ilu
*/
public class Base64Utils
{
/** Creates a new instance of Base64Utils */
public Base64Utils()
{
}
/**
* Base64Encoding 방식으로 바이트 배열을 아스키 문자열로 인코딩한다.
* In-Binany, Out-Ascii
*
* @param encodeBytes 인코딩할 바이트 배열(byte[])
* @return 인코딩된 아스키 문자열(String)
*/
public static String encode(byte[] encodeBytes)
{
byte[] buf = null;
String strResult = null;
BASE64Encoder base64Encoder = new BASE64Encoder();
ByteArrayInputStream bin = new ByteArrayInputStream(encodeBytes);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
try
{
base64Encoder.encodeBuffer(bin, bout);
}
catch (Exception e)
{
System.out.println("Exception");
e.printStackTrace();
}
buf = bout.toByteArray();
strResult = new String(buf).trim();
return strResult;
}
/**
* Base64Decoding 방식으로 아스키 문자열을 바이트 배열로 디코딩한다.
* In-Ascii, Out-Binany
*
* @param strDecode 디코딩할 아스키 문자열(String)
* @return 디코딩된 바이트 배열(byte[])
*/
public static byte[] decode(String strDecode)
{
byte[] buf = null;
BASE64Decoder base64Decoder = new BASE64Decoder();
ByteArrayInputStream bin = new ByteArrayInputStream(strDecode.getBytes());
ByteArrayOutputStream bout = new ByteArrayOutputStream();
try
{
base64Decoder.decodeBuffer(bin, bout);
}
catch (Exception e)
{
System.out.println("Exception");
e.printStackTrace();
}
buf = bout.toByteArray();
return buf;
}
// public static void main(String args[])
// {
// String strOrgin = "Monky";
// String strDecode = null;
// byte[] bytOrgin = strOrgin.getBytes();
// System.out.println("OriginString=" + strOrgin);
//
// String strEncoded = Base64Utils.encode(bytOrgin);
// System.out.println("EncodedString=" + strEncoded);
//
// byte[] bytDecoded = Base64Utils.decode(strEncoded);
// strDecode = new String(bytDecoded);
// System.out.println("DecodedString=" + strDecode);
// }
}
ex2) Java Script
/* Encode & Decode Javascript */
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function encode64(input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
keyStr.charAt(enc3) + keyStr.charAt(enc4);
} while (i < input.length);
return output;
}
function decode64(input)
{
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do {
enc1 = keyStr.indexOf(input.charAt(i++));
enc2 = keyStr.indexOf(input.charAt(i++));
enc3 = keyStr.indexOf(input.charAt(i++));
enc4 = keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
} while (i < input.length);
return output;
}
function encode64Han(str)
{
return encode64(escape(str))
}
function decode64Han(str)
{
return unescape(decode64(str))
}
encodeHan,decodeHan을 사용해야 한글이 정사적으로 처리됨
php와 연동해서 테스트한결과 아래 소스 두가지에서 정상적으로 처리됨
ex1)
<?
$name = base64_decode($_GET[name]);
header("Content-type: text/html;charset=utf-8");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo iconv("CP949","UTF-8", base64_encode($name));
?>
ex2)
<?
$name = base64_decode($_GET[name]);
header("Content-type: text/html;charset=euc-kr");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo base64_encode($name);
?>