#include "MyLib.h"Idź do kodu źródłowego tego pliku.
Funkcje | |
| void | WyswietlMacierz (int n, int m, double a[][matrix_M]) |
| void | ZapisMacierzy (char *NazwaPliku, int n, int m, double a[][matrix_M]) |
| void | OdczytMacierzy (const char *NazwaPliku, int *n, int *m, double a[][matrix_M]) |
| int | parserCSV (char *buf, char *ws[], int n, const char *delim) |
| int | NWD (int p, int q) |
| int | NWDr (int p, int q, int *x, int *y) |
| int | pmod (int b, int e, int m) |
| 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) |
| void | WyswietlMacierzInd (int n, int m, double A[][matrix_M], int P[]) |
| void | WyswietlWiersz (int m, double w[]) |
| double | ObliczWyznacznik (int *row, int P[], int n, int m, double A[][matrix_M]) |
Zmienne | |
| const int | matrix_N = 25 |
| const int | matrix_M = 25 |
| const char | separator [] = ";\r\t\n" |
| const char | sepStr [] = "\"" |
| 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" |
| const char | det_naF [] = "A.dat" |
| void deKryptFile | ( | const char * | naFout, | |
| const char * | naFin, | |||
| int | d, | |||
| int | n | |||
| ) |
deszyfracja pliku zaszyfrowanego metoda RSA
klucz prywatny
Definicja w linii 327 pliku MyLib.c.
Odwołuje się do pmod() i sizeF().
00328 { 00329 FILE *Fout,*Fin; 00330 int i,N,M1,P; 00331 char str[10]; 00332 00333 #if RSA_HEX 00334 N = sizeF(naFin)/8; 00335 #else 00336 N = sizeF(naFin)/sizeof(int); 00337 #endif 00338 Fin = fopen(naFin, "r"); 00339 if( Fin==NULL ) 00340 { 00341 perror(naFin); 00342 exit(-1); 00343 } 00344 Fout = fopen(naFout, "w"); 00345 for(i=0; i<N; i=i+1) 00346 { 00347 #if RSA_HEX 00348 fread(str,8,1,Fin); 00349 str[8] = '\0'; 00350 P = strtol(str,NULL,16); 00351 #else 00352 fread(&P,sizeof(int),1,Fin); 00353 #endif 00354 M1 = pmod(P,d,n); 00355 sprintf(str,"%c", (char)M1); 00356 fwrite(str,1,1,Fout); 00357 } 00358 fclose(Fout); 00359 fclose(Fin); 00360 }
| 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 
spelniajace 
Definicja w linii 232 pliku MyLib.c.
Odwołuje się do NWD(), NWDr() i testPodziel().
00233 { 00234 int n,fi_n,y; 00235 00236 if(testPodziel(p) || testPodziel(q)) 00237 { 00238 puts("Upss ..."); 00239 exit(-1); 00240 } 00241 n = p*q; 00242 fi_n = (p-1)*(q-1); 00248 *e = 17; 00249 if( NWD(*e,fi_n)!=1 ) 00250 { 00251 puts("Upss ..."); 00252 exit(-1); 00253 } 00258 NWDr(*e,fi_n,d,&y); 00259 while( *d<0 ) 00260 { 00261 *d = (*d+fi_n) % fi_n; 00262 } 00263 return n; 00264 }
| void kryptFile | ( | const char * | naFout, | |
| const char * | naFin, | |||
| int | e, | |||
| int | n | |||
| ) |
szyfrowanie metoda RSA pliku
klucz publiczny
Definicja w linii 288 pliku MyLib.c.
Odwołuje się do pmod() i sizeF().
00289 { 00290 FILE *Fout,*Fin; 00291 int i,N,M0,P; 00292 #if RSA_HEX 00293 char str[10],c; 00294 #else 00295 char c; 00296 #endif 00297 00298 N = sizeF(naFin); 00299 Fin = fopen(naFin, "r"); 00300 if( Fin==NULL ) 00301 { 00302 perror(naFin); 00303 exit(-1); 00304 } 00305 Fout = fopen(naFout, "w"); 00306 for(i=0; i<N; i=i+1) 00307 { 00308 fread(&c,1,1,Fin); 00309 M0 = (int)c; 00310 P = pmod(M0,e,n); 00311 #if RSA_HEX 00312 sprintf(str,"%08x",P); 00313 fwrite(str,8,1,Fout); 00314 #else 00315 fwrite(&P,sizeof(int),1,Fout); 00316 #endif 00317 } 00318 fclose(Fout); 00319 fclose(Fin); 00320 }
| int NWD | ( | int | p, | |
| int | q | |||
| ) |
Najwiekszy Wspolny Dzielnik
Popularny algorytm Euklidesa
Definicja w linii 151 pliku MyLib.c.
Odwołania w genKluczeRSA().
| int NWDr | ( | int | p, | |
| int | q, | |||
| int * | x, | |||
| int * | y | |||
| ) |
rozszerzony algorytm Euklidesa:
Definicja w linii 171 pliku MyLib.c.
Odwołania w genKluczeRSA().
00172 { 00173 int r,t,xp,xr,yp,yr; 00174 00175 if( p<1 || q<1 ) 00176 { 00177 puts("Ups ..."); 00178 exit(-1); 00179 } 00180 xp = *y = 1; 00181 *x = yp = 0; 00182 for(r=p%q; r!=0; r=p%q) 00183 { 00184 t = p/q; 00185 p = q; 00186 q = r; 00187 xr = *x; 00188 *x = xp - t*xr; 00189 xp = xr; 00190 yr = *y; 00191 *y = yp - t*yr; 00192 yp = yr; 00193 } 00194 return q; 00195 }
| double ObliczWyznacznik | ( | int * | row, | |
| int | P[], | |||
| int | n, | |||
| int | m, | |||
| double | A[][matrix_M] | |||
| ) |
obliczenie wyznacznika metoda eleminacji Gaussa (Gaussian elimination),
| P | opisuje zamiane wierszy, | |
| row | okresla wiersz do ktorego metoda "doszla". |
Definicja w linii 428 pliku MyLib.c.
Odwołuje się do matrix_N.
00429 { 00430 double d[matrix_M],det; 00431 int i,j; 00432 00433 for(i=0; i<matrix_N; i=i+1) 00434 { 00435 P[i] = i; 00436 } 00437 det = 1.0; 00438 for(*row=0; *row<n; *row=*row+1) 00439 { 00440 if( fabs(A[P[*row]][*row])<=1.0e-100 ) 00441 { 00442 for(i=*row+1; i<n; i=i+1 ) 00443 { 00444 if( 1.0e-100<fabs( A[P[i]][*row] ) ) 00445 { 00446 j = P[*row]; 00447 P[*row] = P[i]; 00448 P[i] = j; 00449 det = -det; 00450 break; 00451 } 00452 } 00453 if( i==n ) 00454 { 00455 for(i=0; i<*row-1; i=i+1) 00456 { 00457 det = A[P[i]][i]*det; 00458 } 00459 return det; 00460 } 00461 } 00462 for(i=*row+1; i<m; i=i+1) 00463 { 00464 d[i] = A[P[*row]][i]/A[P[*row]][*row]; 00465 } 00466 for(j=*row+1; j<n; j=j+1) 00467 { 00468 for(i=*row+1; i<m; i=i+1) 00469 { 00470 A[P[j]][i] = A[P[j]][i]-d[i]*A[P[j]][*row]; 00471 } 00472 A[P[j]][*row] = 0.0; 00473 } 00474 } 00475 for(i=0; i<n; i=i+1) 00476 { 00477 det = A[P[i]][i]*det; 00478 } 00479 return det; 00480 }
| void OdczytMacierzy | ( | const char * | NazwaPliku, | |
| int * | n, | |||
| int * | m, | |||
| double | a[][matrix_M] | |||
| ) |
| int parserCSV | ( | char * | buf, | |
| char * | ws[], | |||
| int | n, | |||
| const char * | delim | |||
| ) |
Obsluguje formaty Excel-CSV oraz TSV (ISO-8859-2)
Definicja w linii 67 pliku MyLib.c.
Odwołania w readCSV().
| int pmod | ( | int | b, | |
| int | e, | |||
| int | m | |||
| ) |
| int sizeF | ( | const char * | naF | ) |
wyznaczenie wielkosci pliku w bajtach
| naF | nazwa pliku |
Definicja w linii 271 pliku MyLib.c.
Odwołania w deKryptFile(), kryptFile() i sprRSA().
| int sprRSA | ( | const char * | naF1, | |
| const char * | naF2 | |||
| ) |
sprawdzenie identycznosci plikow
Definicja w linii 365 pliku MyLib.c.
Odwołuje się do sizeF().
00366 { 00367 FILE *F1,*F2; 00368 unsigned char c1,c2; 00369 int i,n; 00370 00371 n = sizeF(naF1); 00372 if( n!=sizeF(naF2) ) 00373 { 00374 return -1; 00375 } 00376 F1 = fopen(naF1,"r"); 00377 F2 = fopen(naF2,"r"); 00378 for(i=0; i<n; i=i+1) 00379 { 00380 fread(&c1,1,1,F1); 00381 fread(&c2,1,1,F2); 00382 if( c1!=c2) 00383 break; 00384 } 00385 fclose(F2); 00386 fclose(F1); 00387 return (i!=n ? -2 : 0 ); 00388 }
| int testPodziel | ( | int | n | ) |
sprawdzam, czy liczba
jest pierwsza
bardziej zaawansowane metody testowania: Test AKS (The AKS primality test)
Definicja w linii 218 pliku MyLib.c.
Odwołania w genKluczeRSA().
| void WyswietlMacierz | ( | int | n, | |
| int | m, | |||
| double | a[][matrix_M] | |||
| ) |
| void WyswietlMacierzInd | ( | int | n, | |
| int | m, | |||
| double | A[][matrix_M], | |||
| int | P[] | |||
| ) |
wyswietlenie macierzy z uwzglednieniem permutacji wierszy
| P | permutacja wierszy |
| void WyswietlWiersz | ( | int | m, | |
| double | w[] | |||
| ) |
| void ZapisMacierzy | ( | char * | NazwaPliku, | |
| int | n, | |||
| int | m, | |||
| double | a[][matrix_M] | |||
| ) |
| const int matrix_N = 25 |
maksymalna ilosc wierszy w macierzy
Definicja w linii 5 pliku MyLib.c.
Odwołania w ObliczWyznacznik().
| const char rsa_naFcrp[] = "_MyLib.crp" |
| const char rsa_naFres[] = "_MyLib.res" |
| const int rsa_p = 61 |
| const int rsa_q = 53 |
1.6.1