0% found this document useful (0 votes)
4 views

Image Encryption Decryption Code Left Aligned

The document contains Java code for an encryption and decryption module using AES with GCM mode, allowing secure file handling through password-based key derivation. It also includes a GUI implementation for selecting images, encrypting, and decrypting them, featuring buttons for various actions and a progress bar. The GUI supports theme toggling and password visibility options, enhancing user experience.

Uploaded by

Pranav Shingne
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Image Encryption Decryption Code Left Aligned

The document contains Java code for an encryption and decryption module using AES with GCM mode, allowing secure file handling through password-based key derivation. It also includes a GUI implementation for selecting images, encrypting, and decrypting them, featuring buttons for various actions and a progress bar. The GUI supports theme toggling and password visibility options, enhancing user experience.

Uploaded by

Pranav Shingne
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

Encryption Module

1: import javax.crypto.Cipher;

2: import javax.crypto.SecretKeyFactory;

3: import javax.crypto.spec.GCMParameterSpec;

4: import javax.crypto.spec.PBEKeySpec;

5: import javax.crypto.spec.SecretKeySpec;

6: import java.security.SecureRandom;

7: import java.io.ByteArrayOutputStream;

8: import java.nio.file.Files;

9: import java.io.File;

10:

11: public class EncryptionModule {

12: private int aesKeyLength = 256;

13:

14: private SecretKeySpec getSecretKeyPBKDF2(String password,


byte[] salt) throws Exception {

15: PBEKeySpec spec = new


PBEKeySpec(password.toCharArray(), salt, 65536, aesKeyLength);

16: SecretKeyFactory factory =


SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");

17: byte[] keyBytes =


factory.generateSecret(spec).getEncoded();

18: return new SecretKeySpec(keyBytes, "AES");

19: }

20:

21: public byte[] encryptFile(File file, String password)


throws Exception {
22: byte[] fileData = Files.readAllBytes(file.toPath());

23:

24: byte[] salt = new byte[16];

25: SecureRandom sr = new SecureRandom();

26: sr.nextBytes(salt);

27: SecretKeySpec secretKey = getSecretKeyPBKDF2(password,


salt);

28:

29: Cipher cipher =


Cipher.getInstance("AES/GCM/NoPadding");

30: byte[] iv = new byte[12];

31: sr.nextBytes(iv);

32: GCMParameterSpec gcmSpec = new GCMParameterSpec(128,


iv);

33: cipher.init(Cipher.ENCRYPT_MODE, secretKey, gcmSpec);

34:

35: byte[] encryptedData = cipher.doFinal(fileData);

36:

37: ByteArrayOutputStream bos = new


ByteArrayOutputStream();

38: bos.write(salt);

39: bos.write(iv);

40: bos.write(encryptedData);

41: return bos.toByteArray();

42: }

43: }

44:
Decryption Module
1: import javax.crypto.Cipher;

2: import javax.crypto.SecretKeyFactory;

3: import javax.crypto.spec.GCMParameterSpec;

4: import javax.crypto.spec.PBEKeySpec;

5: import javax.crypto.spec.SecretKeySpec;

6: import java.nio.file.Files;

7: import java.util.Arrays;

8: import java.io.File;

9:

10: public class DecryptionModule {

11: private int aesKeyLength = 256;

12:

13: private SecretKeySpec getSecretKeyPBKDF2(String password,


byte[] salt) throws Exception {

14: PBEKeySpec spec = new


PBEKeySpec(password.toCharArray(), salt, 65536, aesKeyLength);

15: SecretKeyFactory factory =


SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");

16: byte[] keyBytes =


factory.generateSecret(spec).getEncoded();

17: return new SecretKeySpec(keyBytes, "AES");

18: }

19:

20: public byte[] decryptFile(File encryptedFile, String


password) throws Exception {

21: byte[] encryptedData =


Files.readAllBytes(encryptedFile.toPath());
22:

23: if (encryptedData.length < 28) {

24: throw new Exception("Invalid encrypted data


length");

25: }

26:

27: byte[] salt = Arrays.copyOfRange(encryptedData, 0,


16);

28: byte[] iv = Arrays.copyOfRange(encryptedData, 16, 28);

29: byte[] actualData = Arrays.copyOfRange(encryptedData,


28, encryptedData.length);

30:

31: SecretKeySpec secretKey = getSecretKeyPBKDF2(password,


salt);

32: Cipher cipher =


Cipher.getInstance("AES/GCM/NoPadding");

33: GCMParameterSpec gcmSpec = new GCMParameterSpec(128,


iv);

34: cipher.init(Cipher.DECRYPT_MODE, secretKey, gcmSpec);

35:

36: return cipher.doFinal(actualData);

37: }

38: }

39:

GUI Implementation
1: import javax.swing.*;

2: import java.awt.*;

3: import java.awt.event.*;
4: import java.io.*;

5: import javax.swing.filechooser.FileNameExtensionFilter;

6: import com.formdev.flatlaf.FlatLightLaf;

7: import com.formdev.flatlaf.FlatDarkLaf;

8:

9: public class SecureImageEncryptionGUI extends JFrame {

10: private JButton selectImageBtn, encryptBtn, decryptBtn,


resetBtn, exitBtn, toggleThemeBtn;

11: private JLabel imagePreview, statusLabel;

12: private JTextField passwordField;

13: private JCheckBox showPassword;

14: private JFileChooser fileChooser;

15: private File selectedFile;

16: private JProgressBar progressBar;

17: private boolean darkMode = false;

18:

19: public SecureImageEncryptionGUI() {

20: setTitle("Secure Image Encryption & Decryption");

21: setSize(700, 500);

22: setDefaultCloseOperation(EXIT_ON_CLOSE);

23: setLayout(new BorderLayout());

24:

25: JPanel buttonPanel = new JPanel();

26: selectImageBtn = new JButton("Select Image");

27: encryptBtn = new JButton("Encrypt");

28: decryptBtn = new JButton("Decrypt");


29: resetBtn = new JButton("Reset");

30: exitBtn = new JButton("Exit");

31: toggleThemeBtn = new JButton("Toggle Theme");

32:

33: buttonPanel.add(selectImageBtn);

34: buttonPanel.add(encryptBtn);

35: buttonPanel.add(decryptBtn);

36: buttonPanel.add(resetBtn);

37: buttonPanel.add(exitBtn);

38: buttonPanel.add(toggleThemeBtn);

39:

40: imagePreview = new JLabel("No Image Selected",


SwingConstants.CENTER);

41:
imagePreview.setBorder(BorderFactory.createLineBorder(Color.GRAY)
);

42:

43: JPanel passwordPanel = new JPanel();

44: passwordField = new JPasswordField(15);

45: showPassword = new JCheckBox("Show Password");

46: passwordPanel.add(new JLabel("Password: "));

47: passwordPanel.add(passwordField);

48: passwordPanel.add(showPassword);

49:

50: progressBar = new JProgressBar(0, 100);

51: progressBar.setStringPainted(true);

52:
53: statusLabel = new JLabel("Status: Ready",
SwingConstants.CENTER);

54:

55: add(buttonPanel, BorderLayout.NORTH);

56: add(imagePreview, BorderLayout.CENTER);

57: add(passwordPanel, BorderLayout.SOUTH);

58: add(progressBar, BorderLayout.PAGE_END);

59: add(statusLabel, BorderLayout.PAGE_START);

60:

61: fileChooser = new JFileChooser();

62: fileChooser.setFileFilter(new
FileNameExtensionFilter("Image Files", "png", "jpg", "jpeg"));

63:

64: selectImageBtn.addActionListener(e -> selectImage());

65: encryptBtn.addActionListener(e -> encryptImage());

66: decryptBtn.addActionListener(e -> decryptImage());

67: resetBtn.addActionListener(e -> resetFields());

68: exitBtn.addActionListener(e -> System.exit(0));

69: showPassword.addActionListener(e ->


togglePasswordVisibility());

70: toggleThemeBtn.addActionListener(e -> toggleTheme());

71: }

72:

73: private void selectImage() {

74: int result = fileChooser.showOpenDialog(this);

75: if (result == JFileChooser.APPROVE_OPTION) {

76: selectedFile = fileChooser.getSelectedFile();


77: imagePreview.setText(selectedFile.getName());

78: statusLabel.setText("Selected: " +


selectedFile.getName());

79: }

80: }

81:

82: public static void main(String[] args) {

83: SwingUtilities.invokeLater(() -> {

84: SecureImageEncryptionGUI gui = new


SecureImageEncryptionGUI();

85: gui.setVisible(true);

86: });

87: }

88: }

89:

You might also like