Base64Java 对字符串进行编码和解码

我想把一个字符串编码到 base64中,然后通过一个套接字将它传输回去,再对它进行解码。

但是解码后得到的答案不同。

下面是我的代码,结果是“77 + 9 x6s =”

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

知道怎么实现吗?

709768 次浏览

你可采用以下方法:

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

希望这能解答你的疑问。

以下是一个很好的解决方案-

import android.util.Base64;


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


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

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

对于 Spring 用户,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"));
}

Java8现在支持 BASE64编码和解码: java.util.Base64java.util.Base64.Encoderjava.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);
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);
}
}

公认的答案是使用 ApacheCommons 包,但我是这样使用 Java 的本机库完成的

Java11及以上

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的编码/解码步骤,但是希望您能够理解。