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);
}
}
Любая идея о том, как это реализовать?
Спасибо...
Ответы
Ответ 1
Вы можете использовать следующий подход,
// encode data on your side using BASE64
byte[] bytesEncoded = Base64.encodeBase64(str .getBytes());
System.out.println("ecncoded 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));
Надеюсь, это ответит на ваши сомнения.
Ответ 2
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);
Ответ 3
В принятом ответе используется пакет 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);
}
}
Лучший способ - попробовать/поймать шаги кодирования/декодирования, но, надеюсь, вы получите эту идею.
Ответ 4
Для Spring пользователей Spring Безопасность имеет класс Base64 в пакете org.springframework.security.crypto.codec
, который также может использоваться для кодирования и декодирования 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"));
}
Ответ 5
Следующее - хорошее решение -
import android.util.Base64;
String converted = Base64.encodeToString(toConvert.toString().getBytes(), Base64.DEFAULT);
String stringFromBase = new String(Base64.decode(converted, Base64.DEFAULT));
Что это. Однострочное кодирование и декодирование.
Ответ 6
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);
}
}