2014-10-06 5 views
0

자바와 C 애플리케이션간에 데이터를 전송해야합니다.Java에서 Base64 Ascii 인코딩

org.apache.commons.codec.binary.Base64Base64.encodeBase64 (binaryData)를 사용하여 인코딩 된 바이너리 데이터가 "C"애플리케이션에서 제대로 디코딩되지 않습니다.

"ASCII"패턴을 사용하여 인코딩해야한다고 생각합니다.

Java에서 이진 데이터의 Base64 ASCII 인코딩을 수행하는 방법은 무엇입니까?

답변

0

JDK 8을 사용하는 경우 java.util.Base64과 중첩 클래스 인 java.util.Base64.Encoder을 확인하십시오.

Base64.getEncoder()Base64.Encoder을 반환합니다.

+0

아니요 Java 7을 사용 중입니다. – user1316830

+0

Java 측에서'encodeBase64'의 출력을 디코딩 해 보셨습니까? 문제가 C 응용 프로그램의 디코딩에 있을지 궁금합니다. – juh

+0

예, 자바 측에서는 모든 것이 적절합니다. – user1316830

2

Base64 ASCII 인코딩입니다. Base64 알고리즘으로 이진 데이터를 인코딩하면 출력은 ASCII 바이트입니다. 그것은 Base64의 주된 목적입니다. 이를 증명할 수있는 코드는 다음과 같습니다.

import javax.xml.bind.DatatypeConverter; 
import java.nio.charset.Charset; 
import org.apache.commons.codec.binary.Base64; 

public class Main { 
    public static void main(String[] args) { 
     String s = "我愛我的狗."; 
     byte[] base64Encoded = Base64.encodeBase64(s.getBytes()); 
     Charset ascii = Charset.forName("US-ASCII"); 
     String asciiEncoded = new String(base64Encoded, ascii); 

     System.out.println(DatatypeConverter.printHexBinary(base64Encoded)); 
     System.out.println(DatatypeConverter.printHexBinary(asciiEncoded.getBytes())); 
    } 
} 

사용중인 Apache Base64 인코더는 신뢰할 수 있습니다. 사용중인 C 디코더는 무엇입니까? 어떻게 Java에서 C로 데이터를 전송하고 있습니까? C 측에서 같은 바이트를 "수신 중"입니까?

한 가지 가능한 문제는 다른 버전의 Base64 인코딩 알고리즘을 사용하여 바이트를 인코딩/디코딩한다는 것입니다. Base64에는 여러 가지 변형이 있습니다. 예를 들어 this article을 참조하십시오.

하나 또는 다른 인코더/디코더에서 "safe URL encoding"을 활성화/비활성화 할 수 있습니까?

0

"base64"에는 여러 가지 변형이 있습니다.; 당신은 두 개의 양립 할 수없는 것들을 보았을 것입니다.

https://en.wikipedia.org/wiki/Base64#Variants_summary_table

의 주요 차이점

는 "마지막 두 개의"인코딩 세트의 문자 및 선 길이 제한입니다.

java.util.Base64 내가 공식 RFC 4648 섹션 4 인코딩로 이동 하는 모든 사람을 추천, 선택의 여지가있을 때 당신은 세 가지 다른 변종 https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html

사이에서 선택할 수 있습니다. https://tools.ietf.org/html/rfc4648#section-4