//*************************************//
//******** created by mamo139 *********//
//*** http://mamo139.altervista.org ***//
//*************************************//
#include <stdio.h>
#include <windows.h>
unsigned char* dammibit(unsigned char numero);
unsigned char dammichar(unsigned char *bits);
/*
char *bits;
bits = new char [8];
bits = dammibit(154);
*/
int main (void){
char nomefileb[20];
printf("nome del file base:"); scanf("%s",nomefileb);
//peso supportabile dal file base con steganografia 3-3-2bit
FILE * pFile;
long lSize;
pFile = fopen ( nomefileb , "rb" );
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
fclose (pFile);
printf("massimo peso sostenibile: %d kb!\n",(lSize
/(3
*1024
)));
char nomefiles[20];
printf("nome del file da steganografare:"); scanf("%s",nomefiles);
//peso del file da steganografare
FILE * pFile2;
long lSize2;
pFile2 = fopen ( nomefiles , "rb" );
fseek (pFile2 , 0 , SEEK_END);
lSize2 = ftell (pFile2);
fclose (pFile2);
printf(" peso file da steganografare: %d kb... operazione ",(lSize2
/1024
)); if((lSize2
/1024
)<(lSize
/(3
*1024
))) printf("FATTIBILE \n\n"); else {printf("NON FATTIBILE \n\n");return
0; }
//******************** inizio operazioni di steganografia ***************************//
long lbuffer = 3; //byte letti alla volta nella base
long lbuffer2 = lbuffer/3; //byte letti nel file
printf("buffer impostato a %d bytes\n",lbuffer
);
unsigned char *buf, *buf2; //buffer di lettura
buf = new unsigned char [(lbuffer+54)]; //grandezza del buffer della base
buf2 = new unsigned char [(lbuffer2+54)]; //grandezza del buffer del file
FILE *base, *file, *f_out;
if ((file = fopen(nomefiles, "rb")) &&(base = fopen(nomefileb, "rb")) && (f_out = fopen("cript.bmp", "wb"))){
printf("files aperti con successo!!\n");
size_t b,c; //byte letti
long x=0; //variabile per il ciclo
b = fread( buf, 1, 54, base);
fwrite( buf, 1, b, f_out);
while( c = fread( buf2, 1, lbuffer2, file) ) {
b = fread( buf, 1, lbuffer, base);
/* ciclo di steganografia */
x=x+lbuffer; // x = numero di byte letti dalla base
unsigned char *bits_f;
bits_f = new unsigned char [8];
bits_f = dammibit(buf2[0]);
unsigned char *bits_b1;
bits_b1 = new unsigned char [8];
bits_b1 = dammibit(buf[0]);
unsigned char *bits_b2;
bits_b2 = new unsigned char [8];
bits_b2 = dammibit(buf[1]);
unsigned char *bits_b3;
bits_b3 = new unsigned char [8];
bits_b3 = dammibit(buf[2]);
bits_b1[5] = bits_f[0];
bits_b1[6] = bits_f[1];
bits_b1[7] = bits_f[2];
bits_b2[5] = bits_f[3];
bits_b2[6] = bits_f[4];
bits_b2[7] = bits_f[5];
bits_b3[6] = bits_f[6];
bits_b3[7] = bits_f[7];
buf[0] = dammichar(bits_b1);
buf[1] = dammichar(bits_b2);
buf[2] = dammichar(bits_b3);
if(x%1048575==0)
printf("%d Mb\n",(x
/1048576
));
fwrite( buf, 1, b, f_out);
}
//lbuffer = 120000;
printf("buffer reimpostato a %d bytes\n",lbuffer
); while( b = fread( buf, 1, lbuffer, base) ){
fwrite( buf, 1, b, f_out);
if(x%1048575==0)
printf("%d Mb\n",(x
/1048576
)); }
}
fclose(file);
fclose(base);
fclose(f_out);
system("PAUSE");
return 1;
}
unsigned char* dammibit(unsigned char numero){
unsigned char *bits;
bits = new unsigned char [8];
if(numero<128) bits[0] = 0; // cifra 1
else { bits[0] = 1; numero = numero - 128; }
if(numero<64) bits[1] = 0; // cifra 2
else { bits[1] = 1; numero = numero - 64; }
if(numero<32) bits[2] = 0; // cifra 3
else { bits[2] = 1; numero = numero - 32; }
if(numero<16) bits[3] = 0; // cifra 4
else { bits[3] = 1; numero = numero - 16; }
if(numero<8) bits[4] = 0; // cifra 5
else { bits[4] = 1; numero = numero - 8; }
if(numero<4) bits[5] = 0; // cifra 6
else { bits[5] = 1; numero = numero - 4; }
if(numero<2) bits[6] = 0; // cifra 7
else { bits[6] = 1; numero = numero - 2; }
if(numero<1) bits[7] = 0; // cifra 8
else { bits[7] = 1; numero = numero - 1; }
/*
FILE *prova = fopen("output.txt","wb");
fwrite( bits, 1, 8, prova);
fclose(prova);
*/
return bits;
}
unsigned char dammichar(unsigned char *bits){
unsigned char numero;
numero = bits[0]*128 + bits[1]*64 + bits[2]*32 + bits[3]*16 + bits[4]*8 + bits[5]*4 + bits[6]*2 + bits[7]*1;
return numero;
}