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.

Mã hóa và giải mã AES trong Java

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

Lời kết: Trong thời gian tới Team Việt Dev sẽ tiếp tục chia sẻ thêm nhiều bài viết về lập trình Java miễn phí đến bạn đọc, các bạn nhớ theo dõi kênh để có được những chia sẻ mới nhất.

(Tác giả: Team Việt Dev)

One Response

  1. Thiên 14/05/2020 Reply

Bình luận