MÃ HÓA VÀ GIẢI MÃ AES TRONG JAVA

Mã hóa là một trong những biện pháp hữu ích nhằm giúp giữ cho dữ liệu an toàn, nội dung phần hướng dẫn này nhằm giúp tìm hiểu mã hóa và giải mã AES trong Java.

Trong bài đăng này chúng ta sẽ cùng nhau thảo luận về thuật toán mã hóa đối xứng AES (tiêu chuẩn mã hóa nâng cao) trong Java với chế độ CBC nhanh hơn và an toàn hơn so với 3DES.

Có 2 loại mã hóa cơ bản bao gồm mã hóa đối xứng và bất đối xứng. Trong đó mã hóa đối xứng sử dụng một khóa duy nhất được gọi là khóa riêng hoặc khóa bí mật để mã hóa và giải mã thông tin, còn mã hóa bất đối xứng sử dụng hai khóa khác nhau làm khóa chung và khóa riêng.

Mã hóa AES trong Java (AES Encryption):

public String encrypt(String strToEncrypt, String myKey) {
      try {
            MessageDigest sha = MessageDigest.getInstance("SHA-1");
            byte[] key = myKey.getBytes("UTF-8");
            key = sha.digest(key);
            key = Arrays.copyOf(key, 16);
            SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
      } catch (Exception e) {
            System.out.println(e.toString());
      }
      return null;
}

Giải mã AES trong Java (AES Decryption):

public String decrypt(String strToDecrypt, String myKey) {
      try {
            MessageDigest sha = MessageDigest.getInstance("SHA-1");
            byte[] key = myKey.getBytes("UTF-8");
            key = sha.digest(key);
            key = Arrays.copyOf(key, 16);
            SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
      } catch (Exception e) {
            System.out.println(e.toString());
      }
      return null;
}

Kiểm thử đoạn mã chương trình trên:

public static void main(String[] args) {
      String secretKey = "TVD";
      String originalString = "teamvietdev.com";

      TestAES testAES = new TestAES();
      String encryptedString = testAES.encrypt(originalString, secretKey);
      System.out.println("Encrypt: " + encryptedString);
      String decryptedString = testAES.decrypt(encryptedString, secretKey);
      System.out.println("Decrypt: " + decryptedString);
}

Kết quả sau khi chạy đoạn mã ví dụ trên:

Encrypt: +7ZlfReRyaBJ2MIj1mEjhg==
Decrypt: teamvietdev.com
Related Posts
Lịch sử ngôn ngữ lập trình Java

Java (phiên âm Tiếng Việt: "Gia-va") là một ngôn ngữ lập trình hướng đối tượng, dựa trên lớp được thiết Read more

Phím tắt trong Eclipse giúp tăng năng suất coding

Các phím tắt sẽ giúp tốc độ coding của bạn nhanh hơn rất nhiều, hơn nữa format code của bạn Read more

Lập trình Hướng đối tượng(OOP)

Lập trình hướng đối tượng (tiếng Anh: Object-oriented programming, viết tắt: OOP) là một mẫu hình lập trình dựa trên Read more

Kiểu dữ liệu Nguyên thủy(Primitive)

1. Tổng quan Trong ngôn ngữ lập trình Java có 2 kiểu dữ liệu chúng ta cần nắm và phân Read more

Hãy bình luận đầu tiên

Để lại một phản hồi