Base64 Java 编码和解码字符串

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19743851/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 19:52:28  来源:igfitidea点击:

Base64 Java encode and decode a string

javabase64decodeencode

提问by Sameera Kumarasingha

I want to encode a string into base64and transfer it through a socket and decode it back.

我想将一个字符串编码为一个字符串base64并通过一个套接字将其传输并解码回来。

But after decoding it gives different answer.

但解码后它给出了不同的答案。

Following is my code and result is "77+9x6s="

以下是我的代码,结果是“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);
       }
    }

Any idea about how to implement this?

关于如何实现这一点的任何想法?

采纳答案by Dark Knight

You can use following approach:

您可以使用以下方法:

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

Hope this answers your doubt.

希望这能解答你的疑惑。

回答by Yehonatan

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.

就是这样。单行编码和解码。

回答by iamiddy

For Spring Users , Spring Security has a Base64 class in the org.springframework.security.crypto.codecpackage that can also be used for encoding and decoding of Base64. Ex.

对于 Spring Users 来说,Spring Security 的org.springframework.security.crypto.codec包中有一个 Base64 类,也可以用于 Base64 的编解码。前任。

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

回答by Lakshma Gopidi

Java 8 now supports BASE64 Encoding and Decoding. You can use the following classes: java.util.Base64, java.util.Base64.Encoderand java.util.Base64.Decoder.

Java 8 现在支持 BASE64 编码和解码。您可以使用以下类: java.util.Base64java.util.Base64.Encoderjava.util.Base64.Decoder

Example usage:

用法示例:

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

回答by Tahong Shen

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

回答by nocdib

The accepted answer uses the Apache Commons package but this is how I did it using Java's native libraries

接受的答案使用 Apache Commons 包,但这就是我使用 Java 的本机库的方式

Java 11 and up

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

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

The better way would be to try/catchthe encoding/decoding steps but hopefully you get the idea.

更好的方法是try/catch编码/解码步骤,但希望你能明白。