Base64 Java 문자열 인코딩 및 디코딩
이 질문에는 이미 답변이 있습니다.
- Java 16 답변 에서 Base64로 인코딩
문자열을 인코딩 base64
하고 소켓을 통해 전송하고 다시 디코딩 하고 싶습니다 .
그러나 디코딩 한 후에는 다른 대답을 제공합니다.
다음은 내 코드이며 결과는 "77 + 9x6s ="
import javax.xml.bind.DatatypeConverter;
public class f{
public static void main(String a[]){
String str = new String(DatatypeConverter.parseBase64Binary("user:123"));
String res = DatatypeConverter.printBase64Binary(str.getBytes());
System.out.println(res);
}
}
이것을 구현하는 방법에 대한 아이디어가 있습니까?
다음과 같은 접근 방식을 사용할 수 있습니다.
import org.apache.commons.codec.binary.Base64;
// Encode data on your side using BASE64
byte[] bytesEncoded = Base64.encodeBase64(str.getBytes());
System.out.println("encoded value is " + new String(bytesEncoded));
// Decode data on other side, by processing encoded data
byte[] valueDecoded = Base64.decodeBase64(bytesEncoded);
System.out.println("Decoded value is " + new String(valueDecoded));
이것이 당신의 의심에 답하기를 바랍니다.
Java 8은 이제 BASE64 인코딩 및 디코딩을 지원합니다. 다음과 같은 클래스를 사용할 수 있습니다 java.util.Base64
, java.util.Base64.Encoder
하고 java.util.Base64.Decoder
.
사용법 예 :
// encode with padding
String encoded = Base64.getEncoder().encodeToString(someByteArray);
// encode without padding
String encoded = Base64.getEncoder().withoutPadding().encodeToString(someByteArray);
// decode a String
byte [] barr = Base64.getDecoder().decode(encoded);
Java 11 용으로 업데이트되었습니다.
import java.util.Base64;
public class Base64Encoding {
public static void main(String[] args) {
Base64.Encoder enc = Base64.getEncoder();
Base64.Decoder dec = Base64.getDecoder();
String str = "77+9x6s=";
// encode data using BASE64
String encoded = enc.encodeToString(str.getBytes());
System.out.println("encoded value is \t" + encoded);
// Decode data
String decoded = new String(dec.decode(encoded));
System.out.println("decoded value is \t" + decoded);
System.out.println("original value is \t" + str);
}
}
허용되는 답변은 Apache Commons 패키지를 사용하지만 이것이 내가 사용한 방법입니다. 이는 javax.xml.bind.DatatypeConverter
Java 6 이상에서 작동합니다.
import java.io.UnsupportedEncodingException;
import javax.xml.bind.DatatypeConverter;
public class EncodeString64 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "77+9x6s=";
// encode data using BASE64
String encoded = DatatypeConverter.printBase64Binary(str.getBytes());
System.out.println("encoded value is \t" + encoded);
// Decode data
String decoded = new String(DatatypeConverter.parseBase64Binary(encoded));
System.out.println("decoded value is \t" + decoded);
System.out.println("original value is \t" + str);
}
}
The better way would be to try/catch
the encoding/decoding steps but hopefully you get the idea.
For Spring Users , Spring Security has a Base64 class in the org.springframework.security.crypto.codec
package that can also be used for encoding and decoding of Base64. Ex.
public static String base64Encode(String token) {
byte[] encodedBytes = Base64.encode(token.getBytes());
return new String(encodedBytes, Charset.forName("UTF-8"));
}
public static String base64Decode(String token) {
byte[] decodedBytes = Base64.decode(token.getBytes());
return new String(decodedBytes, Charset.forName("UTF-8"));
}
The following is a good solution -
import android.util.Base64;
String converted = Base64.encodeToString(toConvert.toString().getBytes(), Base64.DEFAULT);
String stringFromBase = new String(Base64.decode(converted, Base64.DEFAULT));
That's it. A single line encoding and decoding.
import javax.xml.bind.DatatypeConverter;
public class f{
public static void main(String a[]){
String str = new String(DatatypeConverter.printBase64Binary(new String("user:123").getBytes()));
String res = DatatypeConverter.parseBase64Binary(str);
System.out.println(res);
}
}
참고URL : https://stackoverflow.com/questions/19743851/base64-java-encode-and-decode-a-string
'Programing' 카테고리의 다른 글
두 개의 인라인 블록, 너비 50 % 요소가 두 번째 줄로 줄 바꿈 (0) | 2020.06.14 |
---|---|
상대 경로 및 / 또는 파일 이름에서 절대 경로 확인 (0) | 2020.06.14 |
일반적인 CSS 미디어 쿼리 중단 점 (0) | 2020.06.14 |
공분산 및 공분산 실제 사례 (0) | 2020.06.14 |
파이썬은 텍스트 파일을 연결 (0) | 2020.06.14 |