#include <sys/stat.h>#include "MyLib.h"Idź do kodu źródłowego tego pliku.
Funkcje | |
| int | testPodziel (int n) |
| int | genKluczeRSA (int *e, int *d, int p, int q) |
| int | sizeF (const char *naF) |
| void | kryptFile (const char *naFout, const char *naFin, int e, int n) |
| void | deKryptFile (const char *naFout, const char *naFin, int d, int n) |
| int | sprRSA (const char *naF1, const char *naF2) |
| int | main () |
Zmienne | |
| const int | rsa_p = 61 |
| const int | rsa_q = 53 |
| const char | rsa_naFin [] = "_MyLib.c" |
| const char | rsa_naFcrp [] = "_MyLib.crp" |
| const char | rsa_naFres [] = "_MyLib.res" |
| void deKryptFile | ( | const char * | naFout, | |
| const char * | naFin, | |||
| int | d, | |||
| int | n | |||
| ) |
deszyfracja pliku zaszyfrowanego metoda RSA
klucz prywatny
Definicja w linii 143 pliku rsa.c.
Odwołuje się do pmod() i sizeF().
Odwołania w main().
00144 { 00145 FILE *Fout,*Fin; 00146 int i,N,M1,P; 00147 char str[10]; 00148 00149 #if RSA_HEX 00150 N = sizeF(naFin)/8; 00151 #else 00152 N = sizeF(naFin)/sizeof(int); 00153 #endif 00154 Fin = fopen(naFin, "r"); 00155 if( Fin==NULL ) 00156 { 00157 perror(naFin); 00158 exit(-1); 00159 } 00160 Fout = fopen(naFout, "w"); 00161 for(i=0; i<N; i=i+1) 00162 { 00163 #if RSA_HEX 00164 fread(str,8,1,Fin); 00165 str[8] = '\0'; 00166 P = strtol(str,NULL,16); 00167 #else 00168 fread(&P,sizeof(int),1,Fin); 00169 #endif 00170 M1 = pmod(P,d,n); 00171 sprintf(str,"%c", (char)M1); 00172 fwrite(str,1,1,Fout); 00173 } 00174 fclose(Fout); 00175 fclose(Fin); 00176 }
| int genKluczeRSA | ( | int * | e, | |
| int * | d, | |||
| int | p, | |||
| int | q | |||
| ) |
generowanie klucza publicznego i prywatnego na rzecz metody szyfrowania RSA
jest wybrana w ten sposob, aby byla wzglednie pierwsza z
tu 
obliczam
spelniajace 
Definicja w linii 48 pliku rsa.c.
Odwołuje się do NWD(), NWDr() i testPodziel().
Odwołania w main().
00049 { 00050 int n,fi_n,y; 00051 00052 if(testPodziel(p) || testPodziel(q)) 00053 { 00054 puts("Upss ..."); 00055 exit(-1); 00056 } 00057 n = p*q; 00058 fi_n = (p-1)*(q-1); 00064 *e = 17; 00065 if( NWD(*e,fi_n)!=1 ) 00066 { 00067 puts("Upss ..."); 00068 exit(-1); 00069 } 00074 NWDr(*e,fi_n,d,&y); 00075 while( *d<0 ) 00076 { 00077 *d = (*d+fi_n) % fi_n; 00078 } 00079 return n; 00080 }
| void kryptFile | ( | const char * | naFout, | |
| const char * | naFin, | |||
| int | e, | |||
| int | n | |||
| ) |
szyfrowanie metoda RSA pliku
klucz publiczny
Definicja w linii 104 pliku rsa.c.
Odwołuje się do pmod() i sizeF().
Odwołania w main().
00105 { 00106 FILE *Fout,*Fin; 00107 int i,N,M0,P; 00108 #if RSA_HEX 00109 char str[10],c; 00110 #else 00111 char c; 00112 #endif 00113 00114 N = sizeF(naFin); 00115 Fin = fopen(naFin, "r"); 00116 if( Fin==NULL ) 00117 { 00118 perror(naFin); 00119 exit(-1); 00120 } 00121 Fout = fopen(naFout, "w"); 00122 for(i=0; i<N; i=i+1) 00123 { 00124 fread(&c,1,1,Fin); 00125 M0 = (int)c; 00126 P = pmod(M0,e,n); 00127 #if RSA_HEX 00128 sprintf(str,"%08x",P); 00129 fwrite(str,8,1,Fout); 00130 #else 00131 fwrite(&P,sizeof(int),1,Fout); 00132 #endif 00133 } 00134 fclose(Fout); 00135 fclose(Fin); 00136 }
| int main | ( | ) |
Definicja w linii 206 pliku rsa.c.
Odwołuje się do deKryptFile(), genKluczeRSA(), kryptFile(), pmod(), rsa_naFcrp, rsa_naFin, rsa_naFres, rsa_p, rsa_q i sprRSA().
00207 { 00208 int n,e,d,M0,M1,P; 00209 00210 n = genKluczeRSA(&e, &d, rsa_p, rsa_q); 00211 printf("Klucz publiczny: (%i, %i)\n", e,n); 00212 printf("Klucz prywatny : (%i, %i)\n\n", d,n); 00213 // kodowanie liczby M 00214 M0 = 123; 00215 P = pmod(M0,e,n); 00216 printf("liczbe: %i zakodowano jako: %i\n", M0, P); 00217 // dekodowanie P 00218 M1 = pmod(P,d,n); 00219 // sprawdzenie 00220 printf("sprawdzenie kodowania liczby: "); 00221 if( M0!=M1 ) 00222 { 00223 puts("Upss ...\n"); 00224 exit(-1); 00225 } 00226 else 00227 { 00228 puts("OK !\n"); 00229 } 00230 puts("Szyfrowanie plikow\n"); 00231 printf("Plik do zaszyfrowania: \t%s\n",rsa_naFin); 00232 printf("Plik zaszyfrowany:\t%s\n",rsa_naFcrp); 00233 printf("Plik odszyfrowany:\t%s\n\n",rsa_naFres); 00234 #if RSA_HEX 00235 puts("Plik zaszyfrowany bedzie w hexach"); 00236 #else 00237 puts("Plik zaszyfrowany bedzie w postaci binarnej"); 00238 #endif 00239 kryptFile( rsa_naFcrp, rsa_naFin, e, n); 00240 deKryptFile( rsa_naFres, rsa_naFcrp, d, n); 00241 if( sprRSA(rsa_naFin, rsa_naFres) < 0 ) 00242 { 00243 puts("Szyfrowanie i deszyfrowanie plikow NIE jest prawidlowe"); 00244 } 00245 else 00246 { 00247 puts("Szyfrowanie i deszyfrowanie plikow JEST poprawne"); 00248 } 00249 return 0; 00250 }
| int sizeF | ( | const char * | naF | ) |
wyznaczenie wielkosci pliku w bajtach
| naF | nazwa pliku |
Definicja w linii 87 pliku rsa.c.
Odwołania w deKryptFile(), kryptFile() i sprRSA().
00088 { 00089 struct stat sb; 00090 00091 if( stat(naF, &sb)==-1 ) 00092 { 00093 perror(naF); 00094 exit(-1); 00095 } 00096 return (int)sb.st_size; 00097 }
| int sprRSA | ( | const char * | naF1, | |
| const char * | naF2 | |||
| ) |
sprawdzenie identycznosci plikow
Definicja w linii 181 pliku rsa.c.
Odwołuje się do sizeF().
Odwołania w main().
00182 { 00183 FILE *F1,*F2; 00184 unsigned char c1,c2; 00185 int i,n; 00186 00187 n = sizeF(naF1); 00188 if( n!=sizeF(naF2) ) 00189 { 00190 return -1; 00191 } 00192 F1 = fopen(naF1,"r"); 00193 F2 = fopen(naF2,"r"); 00194 for(i=0; i<n; i=i+1) 00195 { 00196 fread(&c1,1,1,F1); 00197 fread(&c2,1,1,F2); 00198 if( c1!=c2) 00199 break; 00200 } 00201 fclose(F2); 00202 fclose(F1); 00203 return (i!=n ? -2 : 0 ); 00204 }
| int testPodziel | ( | int | n | ) |
sprawdzam, czy liczba
jest pierwsza
bardziej zaawansowane metody testowania: Test AKS (The AKS primality test)
Definicja w linii 34 pliku rsa.c.
Odwołania w genKluczeRSA().
00035 { 00036 int i,m; 00037 00038 m = n/2; 00039 for(i=2; i<m && n%i ; i=i+1) 00040 ; 00041 return (int)(i<m); 00042 }
| const char rsa_naFcrp[] = "_MyLib.crp" |
| const char rsa_naFin[] = "_MyLib.c" |
| const char rsa_naFres[] = "_MyLib.res" |
| const int rsa_p = 61 |
| const int rsa_q = 53 |
1.5.8