/NE441

Primary LanguageJava

NE441

import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO;

public class HideMessage {

public static void main(String[] args) {
    String originalText = "esisar";
    String secretText = "P2025";
    String imagePath = "image.png";

    hideMessage(originalText, secretText, imagePath);
    System.out.println("Message caché avec succès dans l'image.");
}

public static void hideMessage(String originalText, String secretText, String imagePath) {
    try {
        // Créer une image en mémoire
        BufferedImage image = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);

        // Convertir le message original en une séquence de bits
        StringBuilder binaryOriginal = new StringBuilder();
        for (char c : originalText.toCharArray()) {
            binaryOriginal.append(String.format("%8s", Integer.toBinaryString(c)).replace(' ', '0'));
        }

        // Convertir le message secret en une séquence de bits
        StringBuilder binarySecret = new StringBuilder();
        for (char c : secretText.toCharArray()) {
            binarySecret.append(String.format("%8s", Integer.toBinaryString(c)).replace(' ', '0'));
        }

        int binaryIndex = 0;

        // Parcourir les pixels de l'image
        for (int y = 0; y < image.getHeight(); y++) {
            for (int x = 0; x < image.getWidth(); x++) {
                int pixel = image.getRGB(x, y);

                // Masquer les bits de poids faible avec les bits du message original
                int newPixel = (pixel & 0xFFFFFFFE) | Integer.parseInt(String.valueOf(binaryOriginal.charAt(binaryIndex)), 2);

                // Masquer les bits de poids fort avec les bits du message secret
                if (binaryIndex < binarySecret.length()) {
                    newPixel = (newPixel & 0x7FFFFFFF) | (Integer.parseInt(String.valueOf(binarySecret.charAt(binaryIndex)), 2) << 31);
                }

                image.setRGB(x, y, newPixel);

                binaryIndex++;
                if (binaryIndex == Math.max(binaryOriginal.length(), binarySecret.length())) {
                    break; // On a caché tout le message
                }
            }
            if (binaryIndex == Math.max(binaryOriginal.length(), binarySecret.length())) {
                break; // On a caché tout le message
            }
        }

        // Sauvegarder l'image modifiée
        ImageIO.write(image, "png", new File(imagePath));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}