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

Image Encryption and Decryption Using AES Algorithm in Java

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 TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views

Image Encryption and Decryption Using AES Algorithm in Java

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 TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

import javax.crypto.

Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.*;
import java.security.Key;
import java.util.Random;

public class ImageEncryptionApplet extends JFrame implements ActionListener {

private JLabel uploadedImageLabel, encryptedImageLabel, decryptedImageLabel;


private JButton uploadButton, encryptButton, decryptButton;
private File imageFile;
private Key secretKey;
private byte[] encryptedData;
private BufferedImage uploadedImage;

public ImageEncryptionApplet() {
// Set layout manager
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 10, 10);
gbc.fill = GridBagConstraints.BOTH;

// Background color
getContentPane().setBackground(new Color(60, 63, 65));

// Create components
uploadButton = createCustomButton("Upload Image");
encryptButton = createCustomButton("Encrypt");
decryptButton = createCustomButton("Decrypt");

uploadedImageLabel = createCustomLabel("Uploaded Image");


encryptedImageLabel = createCustomLabel("Encrypted Image");
decryptedImageLabel = createCustomLabel("Decrypted Image");

// Add buttons to the top row


gbc.gridx = 0;
gbc.gridy = 0;
add(uploadButton, gbc);

gbc.gridx = 1;
add(encryptButton, gbc);

gbc.gridx = 2;
add(decryptButton, gbc);

// Add image labels


gbc.gridy = 1;
gbc.gridx = 0;
add(uploadedImageLabel, gbc);

gbc.gridx = 1;
add(encryptedImageLabel, gbc);
gbc.gridx = 2;
add(decryptedImageLabel, gbc);

// Add button listeners


uploadButton.addActionListener(this);
encryptButton.addActionListener(this);
decryptButton.addActionListener(this);

encryptButton.setEnabled(false);
decryptButton.setEnabled(false);

// Frame settings
setTitle("Image Encryption and Decryption");
setExtendedState(JFrame.MAXIMIZED_BOTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public static void main(String[] args) {


new ImageEncryptionApplet();
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == uploadButton) {
uploadImage();
} else if (e.getSource() == encryptButton) {
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() {
try {
encryptImage();
} catch (Exception ex) {
JOptionPane.showMessageDialog(ImageEncryptionApplet.this,
"Error during encryption: " + ex.getMessage());
ex.printStackTrace();
}
return null;
}
}.execute();
} else if (e.getSource() == decryptButton) {
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() {
try {
decryptImage();
} catch (Exception ex) {
JOptionPane.showMessageDialog(ImageEncryptionApplet.this,
"Error during decryption: " + ex.getMessage());
ex.printStackTrace();
}
return null;
}
}.execute();
}
}

private JButton createCustomButton(String text) {


JButton button = new JButton(text);
button.setBackground(new Color(48, 123, 210));
button.setForeground(Color.WHITE);
button.setFont(new Font("Arial", Font.BOLD, 14));
button.setFocusPainted(false);
return button;
}

private JLabel createCustomLabel(String text) {


JLabel label = new JLabel(text, SwingConstants.CENTER);
label.setForeground(Color.WHITE);
label.setBorder(BorderFactory.createLineBorder(Color.WHITE));
return label;
}

private void uploadImage() {


JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
imageFile = fileChooser.getSelectedFile();
try {
uploadedImage = ImageIO.read(imageFile);
if (uploadedImage != null) {
uploadedImageLabel.setIcon(new
ImageIcon(uploadedImage.getScaledInstance(400, 400, Image.SCALE_SMOOTH)));
uploadedImageLabel.setText("");

encryptButton.setEnabled(true);
decryptButton.setEnabled(false);

JOptionPane.showMessageDialog(this, "Image uploaded


successfully.");
} else {
JOptionPane.showMessageDialog(this, "Invalid image file.");
}
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "Error reading the image: " +
ex.getMessage());
}
}
}

private void encryptImage() throws Exception {


if (uploadedImage != null) {
secretKey = generateKey();

ByteArrayOutputStream baos = new ByteArrayOutputStream();


String format = getFileExtension(imageFile);
ImageIO.write(uploadedImage, format, baos);
byte[] imageData = baos.toByteArray();

Cipher cipher = Cipher.getInstance("AES");


cipher.init(Cipher.ENCRYPT_MODE, secretKey);
encryptedData = cipher.doFinal(imageData);

BufferedImage scrambledImage = scrambleImage(uploadedImage);


encryptedImageLabel.setIcon(new
ImageIcon(scrambledImage.getScaledInstance(400, 400, Image.SCALE_SMOOTH)));
encryptedImageLabel.setText("");
JOptionPane.showMessageDialog(this, "Image encrypted successfully.");
encryptButton.setEnabled(false);
decryptButton.setEnabled(true);
}
}

private void decryptImage() throws Exception {


if (encryptedData != null) {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(encryptedData);

ByteArrayInputStream bais = new ByteArrayInputStream(decryptedData);


BufferedImage decryptedImage = ImageIO.read(bais);

decryptedImageLabel.setIcon(new
ImageIcon(decryptedImage.getScaledInstance(400, 400, Image.SCALE_SMOOTH)));
decryptedImageLabel.setText("");

File decryptedImageFile = new File("decrypted_image.jpg");


ImageIO.write(decryptedImage, "jpg", decryptedImageFile);

JOptionPane.showMessageDialog(this, "Image decrypted successfully.


Saved as 'decrypted_image.jpg'.");
}
}

private Key generateKey() throws Exception {


KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
return keyGen.generateKey();
}

private String getFileExtension(File file) {


String name = file.getName();
int index = name.lastIndexOf('.');
return (index > 0 && index < name.length() - 1) ? name.substring(index +
1).toLowerCase() : "jpg";
}

private BufferedImage scrambleImage(BufferedImage image) {


BufferedImage scrambled = new BufferedImage(image.getWidth(),
image.getHeight(), image.getType());
Random rand = new Random();
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
int randomX = rand.nextInt(image.getWidth());
int randomY = rand.nextInt(image.getHeight());
scrambled.setRGB(x, y, image.getRGB(randomX, randomY));
}
}
return scrambled;
}
}

You might also like