Requisito previo: Introducción a la esteganografía de imágenes , Implementación con Python .
La esteganografía es el método de ocultar datos secretos dentro de cualquier forma de medio digital. La idea principal detrás de la esteganografía es ocultar la existencia de datos en cualquier medio como audio, video, imagen, etc. Cuando hablamos de esteganografía de imágenes, la idea es bastante simple. Las imágenes están formadas por píxeles que generalmente se refieren al color de ese píxel en particular. En una imagen en escala de grises (blanco y negro), estos valores de píxeles oscilan entre 0 y 255 , siendo 0 negro y 255 blanco.
Concepto de incrustación de datos basada en LSB:
LSB significa bit menos significativo. La idea detrás de la incrustación de LSB es que si cambiamos el valor del último bit de un píxel, no habrá mucho cambio visible en el color. Por ejemplo, 0 es negro. Cambiar el valor a 1 no hará mucha diferencia, ya que todavía es negro, solo un tono más claro.
La codificación se realiza mediante los siguientes pasos:
- Convertir la imagen a escala de grises
- Cambiar el tamaño de la imagen si es necesario
- Convierte el mensaje a su formato binario.
- Inicializar la imagen de salida igual que la imagen de entrada
- Recorra cada píxel de la imagen y haga lo siguiente:
- Convertir el valor de píxel a binario
- Obtener el siguiente bit del mensaje para ser incrustado
- Crear una temperatura variable
- Si el bit de mensaje y el LSB del píxel son iguales, configure temp = 0
- Si el bit de mensaje y el LSB del píxel son diferentes, configure temp = 1
- Esta configuración de temperatura se puede hacer tomando XOR del bit de mensaje y el LSB del píxel
- Actualice el píxel de la imagen de salida para ingresar el valor de píxel de la imagen + temperatura
- Continúe actualizando la imagen de salida hasta que todos los bits del mensaje estén incrustados
- Finalmente, escriba la entrada y la imagen de salida en el sistema local.
Ejemplo:
Entrada: mensaje = ‘geeksforgeeks’
Salida: imagen con el mensaje dado incrustado:
A continuación se muestra la implementación en MATLAB:
matlab
% Clear the existing workspace clear all; % Clear the command window clc; % Read the input image input = imread('peppers.png'); % Convert image to grayscale input=rgb2gray(input); % Resize the image to required size input=imresize(input, [512 512]); % Message to be embedded message='geeksforgeeks'; % Length of the message where each character is 8 bits len = length(message) * 8; % Get all the ASCII values of the characters of the message ascii_value = uint8(message); % Convert the decimal values to binary bin_message = transpose(dec2bin(ascii_value, 8)); % Get all the binary digits in separate row bin_message = bin_message(:); % Length of the binary message N = length(bin_message); % Converting the char array to numeric array bin_num_message=str2num(bin_message); % Initialize output as input output = input; % Get height and width for traversing through the image height = size(input, 1); width = size(input, 2); % Counter for number of embedded bits embed_counter = 1; % Traverse through the image for i = 1 : height for j = 1 : width % If more bits are remaining to embed if(embed_counter <= len) % Finding the Least Significant Bit of the current pixel LSB = mod(double(input(i, j)), 2); % Find whether the bit is same or needs to change temp = double(xor(LSB, bin_num_message(embed_counter))); % Updating the output to input + temp output(i, j) = input(i, j)+temp; % Increment the embed counter embed_counter = embed_counter+1; end end end % Write both the input and output images to local storage % Mention the path to a folder here. imwrite(input, 'path_to_folder\originalImage.png'); imwrite(output, 'path_to_folder\stegoImage.png');
Comparación de imágenes:
Como podemos ver en la captura de pantalla anterior, la entrada y la imagen de salida se ven exactamente iguales para el ojo humano. La imagen de salida tiene el mensaje incrustado en ella.
Ventajas de este método:
- Este método es muy rápido y fácil de implementar en comparación con otros métodos de esteganografía de imágenes.
- La imagen de salida tiene una ligera diferencia con la imagen de entrada.
- En lugar de incrustar el mensaje solo en el LSB, podemos incrustar el mensaje en los dos últimos LSB, incrustando así incluso mensajes grandes.
- Este método constituye la base de muchos otros algoritmos complejos.
- En lugar de incrustar el mensaje solo en el LSB, podemos incrustar el mensaje en los dos últimos LSB, incrustando así incluso mensajes grandes.
Desventajas de este método:
- Este tipo de codificación de datos es débil ya que se puede decodificar fácilmente tomando los LSB de la imagen y obteniendo el mensaje en formato binario.
- Este método es demasiado antiguo porque se usó hace mucho tiempo cuando aún no se habían desarrollado otros métodos de codificación.
- Al incrustar el mensaje en más de un LSB, la calidad de la imagen puede reducirse dependiendo de cuántos píxeles se cambien.
Publicación traducida automáticamente
Artículo escrito por AbhijeetSridhar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA