Base64 Java кодирует и декодирует строку [дубликат]
этот вопрос уже есть ответ здесь:
кодировка Base64 в Java
16 ответов
Я хочу закодировать строку в 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);
}
}
любая идея о как это реализовать?
Спасибо...
6 ответов:
вы можете использовать следующий подход:
// 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, Но вот как я это сделал с помощью
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); } }лучший способ было бы
try/catchшаги кодирования / декодирования, но, надеюсь, вы получите идею.
для пользователей Spring Spring Security имеет класс 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")); }
следующее хорошее решение -
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); } }
Comments