]> AND Private Git Repository - Cipher_code.git/blob - CipherImg/cipher_jpg.cpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Merge branch 'master' of ssh://info.iut-bm.univ-fcomte.fr/Cipher_code
[Cipher_code.git] / CipherImg / cipher_jpg.cpp
1 //g++     cipher_jpg.cpp   -o cipher_jpg -O3
2
3 //cipher_jpg ~/Pictures/ecuador\ 2013/IMG_7548.JPG 38762
4 //usage cipher_jpg image seed
5
6 #include <iostream>
7 #include <fstream>
8 #include <iterator>
9 #include <vector>
10
11
12 using namespace std;
13
14 typedef unsigned char uchar;
15
16 uchar modulo(int x,int N){ return (x % N + N) %N; }
17
18 void fxor(uchar *buf,int sz, int seed,int enc) {
19    int start,end;
20   
21   for(int i=1;i<sz;i++) {
22     if(((uint)buf[i-1])==0xFF && ((uint)buf[i])==0xDA) {
23       cout<<"s "<<i+1<<endl;
24       start=i+16;//not nice
25     }
26     if(((uint)buf[i-1])==0xFF && ((uint)buf[i])==0xD9) {
27       cout<<"e "<<i-2<<endl;
28       end=i-2;
29     }
30   }
31
32
33  
34
35   srand48(seed);
36
37
38   for(int i=0;i<(end-start)/10;i++) {
39     int p=lrand48()%(end-start)+start;
40     if(p<=start || p>=end)
41       cout<<"pb"<<endl;
42     while(buf[p-1]==255 || buf[p]==255 ){
43       p=lrand48()%(end-start)+start;
44       if(p<=start || p>=end)
45         cout<<"pb"<<endl;
46     }
47     uchar v=lrand48()%255;
48     if(enc) {
49       buf[p]=modulo((int)buf[p]+(int)v,255);
50     }
51     else {
52       buf[p]=modulo((int)buf[p]-(int)v,255);
53     }
54   }
55
56 }
57
58
59 int  main(int argc, char **argv){
60   cout<<argv[1]<< endl;
61
62   FILE *fp;
63   fp = fopen(argv[1], "r");
64   fseek(fp, 0L, SEEK_END);
65   int sz = ftell(fp);
66   fseek(fp, 0, SEEK_SET);
67
68   uchar *buf=(uchar*)malloc(sz);
69   uchar *buf2=(uchar*)malloc(sz);
70   fread(buf, sz, 1, fp);
71   fclose(fp);
72
73    
74   int seed=atoi(argv[2]);
75   cout<<sz<<endl;
76  
77
78   fxor(buf,sz,seed,1);
79   
80
81   fp = fopen("lena2.jpg", "w");
82   fwrite (buf , 1, sz, fp);
83   fclose(fp);
84
85   for(int i=0;i<sz;i++) {
86     buf2[i]=buf[i];
87   }
88
89   
90
91
92   fxor(buf2,sz,seed,0);
93
94   fp = fopen("lena3.jpg", "w");
95   fwrite (buf2 , 1, sz, fp);
96   fclose(fp);
97
98
99
100
101
102
103   uchar res=modulo(-1,255);
104   cout<<(int)res<<endl;
105   cout<<-1%255<<endl;
106 }