Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu cách mã hoá Base64 và giải mã thông qua mã Java.
Ngoài việc sử dụng Java 8 để triển khai thì chúng ta sẽ tìm hiểu thêm một thư viện bên thứ 3 là Apache Commons cũng cho phép mã hoá và giải mã Base64.
Base64 trong Java 8
Java 8 cung cung cấp Base64 class cung cấp các method dùng để thao tác với Base64. Mã hoá Base64 sẽ cho ra tập ký tự trong khoảng A-Za-z0-9+/ nếu có một ký tự nào đó nằm ngoài khoảng này thì trình mã hoá sẽ không thể giải mã.
import java.util.Base64; public class Main { public static void main(String args[]) { String originalInput = "test input"; String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes()); System.out.println(encodedString); } }
Output: dGVzdCBpbnB1dA==
Chúng ta có giải mã chuỗi Base64 trở lại dữ liệu như ban đầu thông qua trình giải mã Base64:
import java.util.Base64; public class Main { public static void main(String args[]) { String originalInput = "test input"; String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes()); System.out.println("Encode: " + encodedString); byte[] decodedBytes = Base64.getDecoder().decode(encodedString); String decodedString = new String(decodedBytes); System.out.println("Decode: " + decodedString); } }
Output:
Encode: dGVzdCBpbnB1dA==
Decode: test input
Các ký tự đệm (=) trong chuỗi được mã hoá sẽ bị loại bỏ bởi trình giải mã Base64. Nếu chúng ta muốn loại bỏ luôn những ký tự này trong chuỗi mã hoá thì có thể viết như sau
import java.util.Base64; public class Main { public static void main(String args[]) { String originalInput = "test input"; String encodedString = Base64.getEncoder().withoutPadding().encodeToString(originalInput.getBytes()); System.out.println("Encode: " + encodedString); byte[] decodedBytes = Base64.getDecoder().decode(encodedString); String decodedString = new String(decodedBytes); System.out.println("Decode: " + decodedString); } }
Output:
Encode: dGVzdCBpbnB1dA
Decode: test input
Base64 sử dụng Apache Commons
Đầu tiên để sử dụng apache commons chúng ta cần thêm dependency sau:
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency>
Ngoài ra các bạn có thể sử dụng phiên bản mới hơn của apache commons tại maven central.
Apache commons cũng cung cấp một Base64 API cho phép mã hóa và giải mã Base64 rất đơn giản thông qua đoạn mã sau:
import org.apache.commons.codec.binary.Base64; public class Main { public static void main(String... args) { String originalInput = "test input"; String encodedString = new String(Base64.encodeBase64(originalInput.getBytes())); System.out.println("Encode: " + encodedString); String decodedString = new String(Base64.decodeBase64(encodedString.getBytes())); System.out.println("Decode: " + decodedString); } }
Output:
Encode: dGVzdCBpbnB1dA==
Decode: test input
Nguồn