Ce face Base64
Base64 scrie orice octeți (o imagine, un text cu diacritice, o cheie) folosind doar 64 de caractere sigure: A-Z, a-z, 0-9, + și /, plus = la final pentru completare. Așa datele binare pot fi puse în JSON, e-mail sau URL-uri. Rezultatul este cu aproximativ o treime mai lung.
Base64.getEncoder().encodeToString(octeti) codează, iar Base64.getDecoder().decode(text) decodează. getUrlEncoder() folosește - și _ în loc de + și /, ca rezultatul să poată sta într-o adresă web; withoutPadding() elimină semnele =.
Base64 nu este criptare: oricine poate decoda textul. Nu-l folosi ca să ascunzi parole.
Ce returnează
getEncoder/getDecoder: obiecte Base64.Encoder/Base64.Decoder. encodeToString: un String. decode: un byte[].
Exemple
Exemplul 1: Codare și decodare
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Main {
public static void main(String[] args) {
String mesaj = "Bună ziua din Iași!";
String codat = Base64.getEncoder().encodeToString(mesaj.getBytes(StandardCharsets.UTF_8));
System.out.println("Codat: " + codat);
byte[] octeti = Base64.getDecoder().decode(codat);
System.out.println("Decodat: " + new String(octeti, StandardCharsets.UTF_8));
}
}
Rezultat
Codat: QnVuxIMgeml1YSBkaW4gSWHImWkh
Decodat: Bună ziua din Iași!
Exemplul 2: Varianta pentru URL-uri și completarea cu =
Aceiași octeți dau + și / cu encoder-ul obișnuit, dar - și _ cu cel pentru URL. Un text decodat greșit aruncă IllegalArgumentException.
import java.util.Base64;
public class Main {
public static void main(String[] args) {
byte[] date = {(byte) 0xFB, (byte) 0xFF, (byte) 0xBF, 65};
System.out.println("Standard: " + Base64.getEncoder().encodeToString(date));
System.out.println("URL: " + Base64.getUrlEncoder().encodeToString(date));
System.out.println("Fără =: " + Base64.getUrlEncoder().withoutPadding().encodeToString(date));
try {
Base64.getDecoder().decode("nu e base64!");
} catch (IllegalArgumentException e) {
System.out.println("Eroare: " + e.getMessage());
}
}
}
Rezultat
Standard: +/+/QQ==
URL: -_-_QQ==
Fără =: -_-_QQ
Eroare: Illegal base64 character 20
Greșeli frecvente
- Crezi că Base64 protejează datele. Este doar o altă scriere, reversibilă de oricine.
- Decodezi cu
getDecoder()un text făcut cugetUrlEncoder()care conține-sau_: primeștiIllegalArgumentException. Folosește perechea potrivită (getUrlDecoder()). - Transformi rezultatul lui
decodeîn text fără codare: foloseștenew String(octeti, StandardCharsets.UTF_8).
Comenzi înrudite
HexFormat: Transformă octeți în text hexazecimal (00–ff) și înapoi; of creează formatatorul, formatHex face conversia.StandardCharsets: Constante pentru codările de text garantate în orice Java; UTF_8 este codarea potrivită pentru diacriticele românești.InputStream: Clasa de bază pentru citirea de octeți (fișiere, rețea, System.in); readAllBytes citește tot conținutul într-un byte[].