Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
23 views

Image Encryption and Decryption Using AES Algorithm in Java

Uploaded by

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

Image Encryption and Decryption Using AES Algorithm in Java

Uploaded by

Pranav Shingne
Copyright
© © All Rights Reserved
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