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

Private GIT Repository
correction
[Cipher_code.git] / CipherVid / cipher_h265.cpp
1 //g++     cipher_h265.cpp   -o cipher_h265 -O3
2
3 //example   vid.h265   seed
4 //cipher_h265 vid1.h265 38762
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
20 void cipher_frame(uchar *buf, int start_sl, int end_sl, int enc) {
21   for(int i=0;i<(end_sl-start_sl)/2;i++) {
22     int p=lrand48()%(end_sl-start_sl)+start_sl;
23     if(p<start_sl || p>=end_sl)
24       cout<<"pb"<<endl;
25     while(buf[p-1]==255 || buf[p]==255 ){
26       p=lrand48()%(end_sl-start_sl)+start_sl;
27       if(p<start_sl || p>=end_sl)
28         cout<<"pb2"<<endl;
29         }
30     uchar v=lrand48()%255;
31     if(enc) {
32       buf[p]=modulo((int)buf[p]+(int)v,255);
33     }
34     else {
35       buf[p]=modulo((int)buf[p]-(int)v,255);
36     }
37   }
38   
39 }
40
41
42
43 void fxor(uchar *buf,int sz, int seed,int enc) {
44   int start_sl,end_sl;
45
46
47   int offset=0;
48   
49   srand48(seed);
50   
51   for(int i=0;i<sz-6;i++) {
52     if(((uint)buf[i])==0x00 && ((uint)buf[i+1])==0x00 &&  ((uint)buf[i+2])==0x01)  {
53
54       if ((  ((uint)buf[i+3])==0x26 ||   ((uint)buf[i+3])==0x2a )  &&  ((uint)buf[i+4])==0x01   ) {
55         cout<<"IDR or I slice "<<i<<"\t";
56         start_sl=i+7+offset;
57         int stop=0;
58         for(int k=i+1;k<sz-4 && !stop;k++) {
59           if(((uint)buf[k])==0x00 && ((uint)buf[k+1])==0x00 && ((uint)buf[k+2])==0x00  && ((uint)buf[k+3])==0x01 ) {
60             cout<<"end "<<k<<endl;
61             stop=1;
62             end_sl=k;//-offset;
63           }
64         }
65         
66         
67         cipher_frame(buf, start_sl, end_sl, enc);
68         
69         
70         
71       }
72
73
74
75
76     }
77
78
79     if(((uint)buf[i])==0x00 && ((uint)buf[i+1])==0x00  && ((uint)buf[i+2])==0x00  &&  ((uint)buf[i+3])==0x01)  {
80
81       if (  (  ((uint)buf[i+4])==0x02 || ((uint)buf[i+4])==0x10 || ((uint)buf[i+4])==0x12  ) &&  ((uint)buf[i+5])==0x01   ) {
82         cout<<"B or P slice "<<i<<"\t";
83         start_sl=i+7+offset;
84         int stop=0;
85         for(int k=i+1;k<sz-4 && !stop;k++) {
86           if(((uint)buf[k])==0x00 && ((uint)buf[k+1])==0x00 && ((uint)buf[k+2])==0x00  && ((uint)buf[k+3])==0x01 ) {
87             cout<<"end "<<k<<endl;
88             stop=1;
89             end_sl=k;//-offset;
90           }
91         }
92         
93         
94         cipher_frame(buf, start_sl, end_sl, enc);
95         
96         
97         
98       }
99
100     }
101
102
103     
104   }
105
106 //      cipher_frame(buf, 1000, sz, enc);
107
108   
109 }
110
111
112 int  main(int argc, char **argv){
113   cout<<argv[1]<< endl;
114
115   FILE *fp;
116   fp = fopen(argv[1], "r");
117   fseek(fp, 0L, SEEK_END);
118   int sz = ftell(fp);
119   fseek(fp, 0, SEEK_SET);
120
121   uchar *buf=(uchar*)malloc(sz);
122   uchar *buf2=(uchar*)malloc(sz);
123   fread(buf, sz, 1, fp);
124   fclose(fp);
125
126    
127   int seed=atoi(argv[2]);
128   cout<<sz<<endl;
129  
130
131   fxor(buf,sz,seed,1);
132   
133
134   fp = fopen("lena2.h265", "w");
135   fwrite (buf , 1, sz, fp);
136   fclose(fp);
137
138   for(int i=0;i<sz;i++) {
139     buf2[i]=buf[i];
140   }
141
142   
143
144
145   fxor(buf2,sz,seed,0);
146
147   fp = fopen("lena3.h265", "w");
148   fwrite (buf2 , 1, sz, fp);
149   fclose(fp);
150
151
152
153
154
155
156
157 }