//*************************************// //******** created by mamo139 *********// //*** http://mamo139.altervista.org ***// //*************************************// #include #include 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); printf("%s!\n",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); printf("%s!\n",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; }