Scarica il sorgente database/100-restore_bytes_from_bmp.cpp
  1. //*************************************//
  2. //******** created by mamo139 *********//
  3. //*** http://mamo139.altervista.org ***//
  4. //*************************************//
  5.  
  6. #include <stdio.h>
  7. #include <windows.h>
  8.  
  9. unsigned char* dammibit(unsigned char numero);
  10. unsigned char dammichar(unsigned char *bits);
  11.  
  12.  
  13. int main (void){
  14.  
  15. char nomefileb[20];
  16. printf("nome del file base:");
  17. scanf("%s",nomefileb);
  18. printf("%s!\n",nomefileb);
  19.  
  20.  
  21. //******************** inizio operazioni di steganografia ***************************//
  22. long lbuffer = 3; //byte letti alla volta nella base
  23. long lbuffer2 = lbuffer/3; //byte letti nel file
  24. printf("buffer impostato a %d bytes\n",lbuffer);
  25.  
  26. unsigned char *buf; //buffer di lettura
  27. buf = new unsigned char [(lbuffer+54)]; //grandezza del buffer della base
  28. FILE *base, *f_out;
  29. if ((base = fopen(nomefileb, "rb")) && (f_out = fopen("decript.dcrp", "wb"))){
  30.  
  31. printf("files aperti con successo!!\n");
  32.  
  33. size_t b,c; //byte letti
  34. long x=0; //variabile per il ciclo
  35. b = fread( buf, 1, 54, base);
  36. while( b = fread( buf, 1, lbuffer, base) ) {
  37.  
  38. /* ciclo di steganografia */
  39. x=x+lbuffer; // x = numero di byte letti dalla base
  40.  
  41.  
  42. unsigned char *bits_f;
  43. bits_f = new unsigned char [8];
  44.  
  45. unsigned char *bits_b1;
  46. bits_b1 = new unsigned char [8];
  47. bits_b1 = dammibit(buf[0]);
  48. unsigned char *bits_b2;
  49. bits_b2 = new unsigned char [8];
  50. bits_b2 = dammibit(buf[1]);
  51. unsigned char *bits_b3;
  52. bits_b3 = new unsigned char [8];
  53. bits_b3 = dammibit(buf[2]);
  54.  
  55. bits_f[0]=bits_b1[5];
  56. bits_f[1]=bits_b1[6];
  57. bits_f[2]=bits_b1[7];
  58. bits_f[3]=bits_b2[5];
  59. bits_f[4]=bits_b2[6];
  60. bits_f[5]=bits_b2[7];
  61. bits_f[6]=bits_b3[6];
  62. bits_f[7]=bits_b3[7];
  63.  
  64. buf[0] = dammichar(bits_f);
  65.  
  66.  
  67. if(x%1048575==0)
  68. printf("%d Mb\n",(x/1048576));
  69.  
  70. fwrite( buf, 1, 1, f_out);
  71.  
  72.  
  73. }
  74. }
  75.  
  76. fclose(base);
  77. fclose(f_out);
  78.  
  79. system("PAUSE");
  80. return 1;
  81. }
  82.  
  83.  
  84. unsigned char* dammibit(unsigned char numero){
  85.  
  86. unsigned char *bits;
  87. bits = new unsigned char [8];
  88.  
  89. if(numero<128) bits[0] = 0; // cifra 1
  90. else { bits[0] = 1; numero = numero - 128; }
  91.  
  92. if(numero<64) bits[1] = 0; // cifra 2
  93. else { bits[1] = 1; numero = numero - 64; }
  94.  
  95. if(numero<32) bits[2] = 0; // cifra 3
  96. else { bits[2] = 1; numero = numero - 32; }
  97.  
  98. if(numero<16) bits[3] = 0; // cifra 4
  99. else { bits[3] = 1; numero = numero - 16; }
  100.  
  101. if(numero<8) bits[4] = 0; // cifra 5
  102. else { bits[4] = 1; numero = numero - 8; }
  103.  
  104. if(numero<4) bits[5] = 0; // cifra 6
  105. else { bits[5] = 1; numero = numero - 4; }
  106.  
  107. if(numero<2) bits[6] = 0; // cifra 7
  108. else { bits[6] = 1; numero = numero - 2; }
  109.  
  110. if(numero<1) bits[7] = 0; // cifra 8
  111. else { bits[7] = 1; numero = numero - 1; }
  112. /*
  113.   FILE *prova = fopen("output.txt","wb");
  114.   fwrite( bits, 1, 8, prova);
  115.   fclose(prova);
  116. */
  117. return bits;
  118.  
  119. }
  120.  
  121. unsigned char dammichar(unsigned char *bits){
  122.  
  123. unsigned char numero;
  124.  
  125. 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;
  126.  
  127. return numero;
  128.  
  129. }