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

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