0% found this document useful (0 votes)
7 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
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 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
We take content rights seriously. If you suspect this is your content, claim it here.
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