Как я...impement изображения стеганография в C, используя алгоритм ЛСБ?
Может ли кто-нибудь помочь мне с моим проектом, основанным на стеганографии изображений только на языке Си? Мне нужно использовать алгоритм наименьших значащих битов, чтобы скрыть пользовательские данные в BMP-изображении. Я знаю, что это за алгоритм, но не понимаю, как его реализовать.
Пожалуйста, помогите мне зашифровать данные в BMP-образ с помощью техники LSB на языке Си.
LSB algo:
Буква "А" имеет код ASCII 65 (десятичный),
это 01000001 в двоичном формате.
Для этого потребуется три последовательных пикселя.
24-битное изображение для хранения буквы "А":
Допустим, что пиксели перед вставкой:
R G B P1-10000000.10100100.10110101, P2-10110101.11110011.10110111, P3-11100111.10110011.00110011
Тогда их значения после вставки буквы "А" будут равны:
10000000.10100101.10110100, 10110100.11110010.10110110, 11100110.10110011.00110011
Что я уже пробовал:
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<math.h> #include<string.h> long asciiToBinary(int n); long asciiToBinary(int n) { int remainder; long binary = 0, i = 1; while(n != 0) { remainder = n%2; n = n/2; binary= binary + (remainder*i); i = i*10; } return binary; } typedef struct { unsigned int width; unsigned int height; unsigned int size; } BITMAPINFOHEADER; typedef struct { unsigned char blue; unsigned char green; unsigned char red; } PIXEL; int main(){ FILE *image; char fpath[1000],mydata[100]; BITMAPINFOHEADER bih; int i=0,b[8],g[8],r[8]; double asciiTobinary; printf("Enter BMP file path"); scanf("%s",fpath); image=fopen(fpath,"rb"); while(image==NULL){ printf("Error! Enter path again:"); scanf("%s",fpath); } fseek(image,2,SEEK_SET); //reading the height and width fread(&bih.size,4,1,image); printf("\n \n Size of the image=%d\n",bih.size); fseek(image,18,SEEK_SET); fread(&bih.width,4,1,image); fseek(image,22,SEEK_SET); fread(&bih.height,4,1,image); printf("\n \n Width of the image =%d \n Height of the image =%d \n pixel = b | g | r \n \n",bih.width,bih.height); PIXEL pic[bih.width*bih.height*2],p; while(!feof(image)){ //reading the pixels rgb values fread(&p.blue,sizeof(p.blue),1,image); fread(&p.green,sizeof(p.green),1,image); fread(&p.red,sizeof(p.red),1,image); pic[i]=p; printf(" %d= %u | %u | %u ",i+54,pic[i].blue,pic[i].green,pic[i].red); i++; } fclose(image); return 0; }
Member 12835561
ответ для приведенного выше кода