programing

Base64 Java 인코딩 및 문자열 디코딩

minecode 2022. 8. 11. 21:23
반응형

Base64 Java 인코딩 및 문자열 디코딩

문자열을 인코딩하고 싶다.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); 

승인된 답변은 Apache Commons 패키지를 사용하지만 Java의 네이티브 라이브러리를 사용하여 이렇게 했습니다.

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);
    }
}

Java 6 - 10

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);
    }
}

하는 것이 더 나을 것이다try/catch부호화/비활성화 단계입니다만, 이해하셨으면 합니다.

Spring Users의 경우 Spring Security는 Base64 클래스가 있습니다.org.springframework.security.crypto.codecBase64의 부호화 및 복호화에도 사용할 수 있는 패키지입니다.예.

 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"));
}

다음은 좋은 해결책입니다.

import android.util.Base64;

String converted = Base64.encodeToString(toConvert.toString().getBytes(), Base64.DEFAULT);

String stringFromBase = new String(Base64.decode(converted, Base64.DEFAULT));

바로 그겁니다.단일 회선 부호화 및 복호화

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

반응형