1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
| #include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void FORMAT_SECONDE(double CURRENT_TIME, double *YEAR, double *DAY, double *HOUR, double *MINUTE, double *SECONDE);
void ECRIRE( FILE *FICHIER, int VALEUR );
int main()
{
// Paramètres affichage console
system("title GENERATEUR CLES WEP");
system("COLOR 09");
system("MODE CON COLS=60 LINES=19");
// Variables representants chacun des 26 digits de la clef WEP codé en Hexadecimal, donc DXX prendra ses valeurs dans 0->15
int D01, D02, D03, D04, D05, D06, D07, D08 , D09, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25, D26;
// Fichier de stockage des clés
FILE *F0=fopen("WEP.txt","w");
if (F0 == NULL)
{
printf("Echec du fopen sur file F0 (WEP.txt) : %s.\n", strerror(errno));
exit(EXIT_FAILURE);
}
// On récupère la valeur de GetTickCount pour avoir la référence à 0 au commencement du bouclage
double INIT_TIME=GetTickCount();
// On initialise le compteur de boucles à 0. Il servira à faire apparaîte des données sur l'avancement de la génération
double COMPTEUR_BOUCLE=0;
// Taille initiale du fichier de stockage des clés
double TAILLE=0;
// Valeur initiale de la variable de contrôle pour l'affichage des données résultantes de la générations
double AFFICHER=0;
// Nombres de clés WEP totales /1000000 ( petit artifice pour stocker la variable alors trop grande )
double K=20282409603651670423947251.286016;
// Début de la génération
for ( D01=0 ; D01<16 ; D01++ )
{
for ( D02=0 ; D02<16 ; D02++ )
{
for ( D03=0 ; D03<16 ; D03++ )
{
for ( D04=0 ; D04<16 ; D04++ )
{
for ( D05=0 ; D05<16 ; D05++ )
{
for ( D06=0 ; D06<16 ; D06++ )
{
for ( D07=0 ; D07<16 ; D07++ )
{
for ( D08=0 ; D08<16 ; D08++ )
{
for ( D09=0 ; D09<16 ; D09++ )
{
for ( D10=0 ; D10<16 ; D10++ )
{
for ( D11=0 ; D11<16 ; D11++ )
{
for ( D12=0 ; D12<16 ; D12++ )
{
for ( D13=0 ; D13<16 ; D13++ )
{
for ( D14=0 ; D14<16 ; D14++ )
{
for ( D15=0 ; D15<16 ; D15++ )
{
for ( D16=0 ; D16<16 ; D16++ )
{
for ( D17=0 ; D17<16 ; D17++ )
{
for ( D18=0 ; D18<16 ; D18++ )
{
for ( D19=0 ; D19<16 ; D19++ )
{
for ( D20=0 ; D20<16 ; D20++ )
{
for ( D21=0 ; D21<16 ; D21++ )
{
for ( D22=0 ; D22<16 ; D22++ )
{
for ( D23=0 ; D23<16 ; D23++ )
{
for ( D24=0 ; D24<16 ; D24++ )
{
for ( D25=0 ; D25<16 ; D25++ )
{
for ( D26=0 ; D26<16 ; D26++ )
{
// Fonction qui envoit la valeur du digit en décimale, donne sa correspondance hexadécimale
// et la sauvegarde dans le fichier de stockage
ECRIRE(F0, D01);
ECRIRE(F0, D02);
ECRIRE(F0, D03);
ECRIRE(F0, D04);
ECRIRE(F0, D05);
ECRIRE(F0, D06);
ECRIRE(F0, D07);
ECRIRE(F0, D08);
ECRIRE(F0, D09);
ECRIRE(F0, D10);
ECRIRE(F0, D11);
ECRIRE(F0, D12);
ECRIRE(F0, D13);
ECRIRE(F0, D14);
ECRIRE(F0, D15);
ECRIRE(F0, D16);
ECRIRE(F0, D17);
ECRIRE(F0, D18);
ECRIRE(F0, D19);
ECRIRE(F0, D20);
ECRIRE(F0, D21);
ECRIRE(F0, D22);
ECRIRE(F0, D23);
ECRIRE(F0, D24);
ECRIRE(F0, D25);
ECRIRE(F0, D26);
// Une clé pèse 26 octets, à chaque tour de boucle on incrémente la taille de la taille d'une clé
TAILLE+=26;
// On convertit la taille en octets en Go ou Mo
double TAILLE_GO=TAILLE/(1024*1024);
// Variable qui compte le nombre de tours de boucles
COMPTEUR_BOUCLE++;
// Variable qui compte le temps écoulé depuis le début du programme en seconde
double CURRENT_TIME = (GetTickCount()-INIT_TIME)/1000;
// Variable qui compte la vitesse de calcul du processeur
double CALCUL_SEC = COMPTEUR_BOUCLE/CURRENT_TIME;
// Variable qui compte le temps de calcul restant en seconde
double TIME_LEFT=(K-COMPTEUR_BOUCLE)/CALCUL_SEC;
double *ANNEES = malloc(sizeof(double));
double *JOURS = malloc(sizeof(double));
double *HEURES = malloc(sizeof(double));
double *MINUTES = malloc(sizeof(double));
double *SECONDES = malloc(sizeof(double));
// Fonction qui formate les secondes du temps écoulé en année, jours...
FORMAT_SECONDE(CURRENT_TIME, ANNEES, JOURS, HEURES, MINUTES, SECONDES);
double *TL_ANNEES = malloc(sizeof(double));
double *TL_JOURS = malloc(sizeof(double));
double *TL_HEURES = malloc(sizeof(double));
double *TL_MINUTES = malloc(sizeof(double));
double *TL_SECONDES = malloc(sizeof(double));
// Fonction qui formate le temps de calcul restant en année, jours...
FORMAT_SECONDE(TIME_LEFT, TL_ANNEES, TL_JOURS, TL_HEURES, TL_MINUTES, TL_SECONDES);
// Variable qui compte la progression totale du calcul
double PROGRESSION=(COMPTEUR_BOUCLE)/(10000*K);
// Si la taille actuelle du fichier qui stock les clés est superieure à la taille définit pour afficher
//l'état d'avancement du calcul, alors on affiche sinon on attend la nouvelle valeur d'affichage
if ( TAILLE_GO>AFFICHER )
{
printf("\n+ PROGRESSION : %.30f %% \n\n+ TAILLE : %.0f Mo \n\n+ CALCUL/S : %.0f \n\n+ TEMPS DE TRAITEMENT : %.0f ANNEE \n %.0f JOUR \n %.0f HEURE \n %.0f MINUTE \n %.0f SECONDE \n\n+ TEMPS RESTANT : %.0f ANNEE \n %.0f JOUR \n %.0f HEURE \n %.0f MINUTE \n %.0f SECONDE \n-----------------------------------------------------------", PROGRESSION, TAILLE_GO, CALCUL_SEC, *ANNEES, *JOURS, *HEURES, *MINUTES, *SECONDES, *TL_ANNEES , *TL_JOURS, *TL_HEURES, *TL_MINUTES, *TL_SECONDES );
AFFICHER+=10;
}
// On libère la mémoire allouée aussi tôt le calcul fait pour ne pas saturer la ram
free(ANNEES );
free(JOURS );
free(HEURES );
free(MINUTES );
free(SECONDES );
free(TL_ANNEES );
free(TL_JOURS );
free(TL_HEURES );
free(TL_MINUTES );
free(TL_SECONDES);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
fclose(F0);
}
void ECRIRE( FILE *FICHIER, int VALEUR )
{
// Si la valeur du digit est inférieure à 9 sa correspondance hexadecimale de change pas
if ( VALEUR<=9 )
{
fprintf(FICHIER, "%d", VALEUR);
}
// Si la valeur du digit est supérieure à 9, on cherche la lettre correspandante.
if ( VALEUR>9 )
{
if ( VALEUR==10 )
{
fprintf(FICHIER,"A");
}
if ( VALEUR==11 )
{
fprintf(FICHIER,"B");
}
if ( VALEUR==12 )
{
fprintf(FICHIER,"C");
}
if ( VALEUR==13 )
{
fprintf(FICHIER,"D");
}
if ( VALEUR==14 )
{
fprintf(FICHIER,"E");
}
if ( VALEUR==15 )
{
fprintf(FICHIER,"F");
}
}
}
void FORMAT_SECONDE(double TIME, double *YEAR, double *DAY, double *HOUR, double *MINUTE, double *SECONDE)
{
double K_YEAR = 31536000;
double K_DAY = 86400 ;
double K_HOUR = 3600 ;
double K_MINUTE = 60 ;
*YEAR = floor( TIME/K_YEAR );
*DAY = floor( (TIME - (*YEAR)*K_YEAR )/K_DAY );
*HOUR = floor( (TIME - (*YEAR)*K_YEAR - (*DAY)*K_DAY )/K_HOUR );
*MINUTE = floor( (TIME - (*YEAR)*K_YEAR - (*DAY)*K_DAY - (*HOUR)*K_HOUR)/K_MINUTE );
*SECONDE = TIME - (*YEAR)*K_YEAR - (*DAY)*K_DAY - (*HOUR)*K_HOUR - (*MINUTE)*K_MINUTE;
} |
Partager