/******fonction de chiffrement ( pointeur ,poiteur , pointeur, taille de la clef)******/ void chiffrement(char *entree, char *sortie,unsigned int *clef,unsigned int n) { FILE *f_in, *f_out; //pointeur sur les fichiers d'entree et de sortie int c; //code ASCII du caractère de lecture du fichier source int chiffre = 0; //code ASCII du caractère de lecture du fichier de sortie unsigned int i = 0; //incrémente la clef pour passer au caractère suivant int booleen = FAUX; //variable de test sur les accents /**ouverture du fichier source**/ if ((f_in = fopen(entree, "r")) == NULL) { fprintf(stderr,"Erreur ds l’ouverture du fichier %s\n", entree); return; } /**ouverture du fichier de sortie**/ if ((f_out = fopen(sortie, "w")) == NULL) { fprintf(stderr,"Erreur ds l’ouverture du fichier %s\n", sortie); return; } /**boucle sur le caractère du fichier source jusqu'à la fin de fichier**/ while ((c = fgetc(f_in)) != EOF) { if( (c<65) || (c>90) ) //si la lettre n'est pas majuscule { //printf("cinit= %d\n",c); if (c == 195) { booleen = VRAI; } else { if (booleen == VRAI) { //printf("caccent= %d\n",c); c = accent(c); booleen = FAUX; //si la lettre est minuscule, 'c' est compris entre 0 et 25 chiffre = (((c-97) + clef[i%n]) % 26) + 65 ; //on lui ajoute la clé puis on ajoute 65 pour que le résultat i++ ; //soit compris entre 65 et 90 i.e codes ascii de et Z } else if (ponctuation(c)==1) { chiffre =32; } else { chiffre = (((c-97) + clef[i%n]) % 26) + 65 ; i++ ; } fprintf(f_out,"%c",chiffre) ; } } else //si la lettre est majuscule { chiffre = (((c-65) + clef[i%n]) % 26) + 65 ; i++ ; fprintf(f_out,"%c",chiffre) ; } } //fermeture du while /**fermeture des fichiers source et sortie**/ fclose(f_in) ; fclose(f_out) ; return ; }
//extern uchar pass_cut; void criteria(cell *c) { uchar let = 0, *raster = 0; cf::version *vers = 0; int16_t r = 0, flacc = 0, flon = 0, inc = 0; cf::version save[VERS_IN_CELL] = { 0 }; int16_t snvers = 0; // #define PROB_V_OK 170 if (c->nvers > 0) memcpy(save, c->vers, c->nvers); snvers = c->nvers; if (!c->nvers) return; get_b_lines(c, &bl); H = (int16_t) get_size(); if (c->nvers == 1 && c->vers[0].let == '>') test_rq(c); if (c->nvers == 1 && ((let = c->vers[0].let) == 'c' || let == 'C') || (c->nvers == 2 && (c->vers[0].let == 'c' && c->vers[1].let == 'C' || c->vers[0].let == 'C' && c->vers[1].let == 'c'))) test_c(c); if (c->nvers >= 2 && (c->vers[0].let == 'a' && c->vers[1].let == 'o' || c->vers[0].let == 'o' && c->vers[1].let == 'a')) crit_oa(c); for (vers = c->vers, flacc = flon = 0; (let = vers->let) != 0; vers++) { { //Andrew if ((let = vers->let) == liga_CC || let == liga_CR) { raster = save_raster(c); inc = AnglesCurve(raster, (int16_t) ((c->w + 7) / 8), c->h); inc = (4 - inc) * 40; if (3 * c ->w > 4 * c ->h) inc += 150; if (3 * c ->w < 2 * c ->h) inc += 150; if (c->env && c->env->nl < 4) inc += 100; if (vers->prob > inc) vers->prob -= inc; else vers->prob = 0; } } if (((language == LANGUAGE_FRENCH || language == LANGUAGE_ITALIAN) && memchr( "ACEIOUaceiou", let, 12) || // Включая нижние акценты "c" 05.07.2002 E.P. language == LANGUAGE_SPANISH && memchr("AEINOUaeniou", let, 12) || language == LANGUAGE_GERMAN && memchr("AOUaou", let, 6) || language == LANGUAGE_RUSSIAN && memchr("Ґ…", let, 2) || language == LANGUAGE_CROATIAN && memchr("SZCszc", let, 6) /*&& !pass_cut*/|| language == LANGUAGE_POLISH && memchr("AESZCNOaeszcno", let, 14) || // Включая нижние акценты a,e 05.07.2002 E.P. language == LANGUAGE_PORTUGUESE && memchr("AEOUIaeoui", let, 10) || language == LANGUAGE_SWEDISH && memchr("AEOaeo", let, 6)) && !flacc || // 05.09.2000 E.P. language == LANGUAGE_CZECH && memchr("AaCcDdEeIiNnOoRrSsTtUuYyZz", let, 26) || language == LANGUAGE_ROMANIAN && memchr("AaIiSsTt", let, 8) || // Включая нижние акценты s,t 05.07.2002 E.P. language == LANGUAGE_HUNGARIAN && memchr("AaEeIiOoUu", let, 10) || language == LANGUAGE_SLOVENIAN && memchr("CcSsZz", let, 6) || // 09.07.2001 E.P. language == LANGUAGE_LATVIAN && memchr("AaCcEeGgIiKkLlNnSsUuZz", let, 22) || language == LANGUAGE_LITHUANIAN && memchr("AaCcEeIiSsUuZz", let, 14) || language == LANGUAGE_ESTONIAN && memchr("AaOoSsUuZz", let, 10) || // 21.05.2002 E.P. language == LANGUAGE_TURKISH && (memchr("AaCcIiGgOoSsUu", let, 14) || let == i_sans_accent) || 0) { flacc = 1; if (accent(c)) break; } // Урезание чужих букв из общих таблиц if (language == LANGUAGE_POLISH && memchr("qQ", let, 2) || // BULGAR 08.09.2000 E.P. language == LANGUAGE_RUSSIAN && langBul && (let == 155 || let == 235 || // Ыы 08.09.2000 E.P. let == 157 || let == 237 || // Ээ 08.09.2000 E.P. let == r_EE_2dot || let == r_e_2dot) || language == LANGUAGE_SLOVENIAN && isnot_slovenian(let) || // 09.07.2001 E.P. language == LANGUAGE_LATVIAN && isnot_latvian(let) || language == LANGUAGE_LITHUANIAN && isnot_lithuanian(let) || language == LANGUAGE_ESTONIAN && isnot_estonian(let) || // 21.05.2002 E.P. language == LANGUAGE_TURKISH && isnot_turkish(let) || 0) { vers->prob >>= 1; if (vers->prob & 1) vers->prob--; if (!vers->prob) vers->prob = 2; } if (c->isBadLetter()) // Oleg : 02-28-96 04:55pm : letter only if (((let = vers->let) == 'i' || let == 'j' || (language == LANGUAGE_TURKISH && let == II_dot_accent) // 17.06.2002 E.P. ) && (r = ij_dot(c)) != 0) { if (r > 0) break; vers--; continue; } // Nick 18.06.2002 if (language == LANGUAGE_TURKISH && ((let = vers->let) == i_sans_accent || let == II_dot_accent) && (r = upper_right_angle(c)) > 0) { vers->prob = MAX(2, vers->prob - r); continue; } if ((let = vers->let) == '!' || let == '?') { if (excl_dot(c) > 0) break; vers--; continue; } if (language != LANGUAGE_RUSSIAN) // refuse with ,Ў if ((let = vers->let) == invers_exm || let == invers_qm) { if (inv_dot(c) > 0) break; vers--; continue; } if ((language == LANGUAGE_FRENCH || language == LANGUAGE_TURKISH // 18.06.2002 E.P. ) && (vers->let == 'c' || vers->let == 'C')) c_to_ctail(c, 0); // AL 940321 if (vers->let == liga_rt && not_rt(c)) { vers--; continue; } if (is_liga_ff(vers->let) && not_ff(c)) { vers--; continue; } if (vers->let == 'n' || vers->let == 'o') flon = 1; }
/******Main******/ int main(int argc, char *argv[0]) { int i,c; unsigned int longueur_clef; unsigned int *clef; int booleen = FAUX; if (argc != 3) //tester le nombre d'arguments, exit si nombre incorrect { fprintf(stderr, "\nErreur : nombre d’arguments invalide\n"); fprintf(stderr, "Syntaxe : %s fichier_entree fichier_sortie\n", argv[0]); return(EXIT_FAILURE) ; } printf("\nEntrez la longueur de la clef sans espace (exemple : texte sans espace = 15 )\t"); scanf("%u", &longueur_clef); clef = malloc(longueur_clef * sizeof(unsigned int)); printf("Entrez un mot clé ou une phrase clé de %d caractères (sans compter les espaces) : ",longueur_clef); c = getchar(); //lire une fois le caractère pour lire entrée i = 0; while(i< longueur_clef) { c = getchar(); if (c == 195) { booleen = VRAI; } else { if (booleen == VRAI) { c = accent(c); booleen = FAUX; clef[i] = c - 97 ; i++ ; } else { if((c!=32) &&((c<65) || (c>90))) //si 'c' n'est pas un espace et n'est pas une lettre majuscule { clef[i] = c - 97 ; //affecte des résultats entre 0 et 25 sur les lettre minuscules i++; } else { clef[i] = c - 65 ; //affecte des résultats entre 0 et 25 sur les lettre majuscules i++; } } } } //fermeture du while chiffrement(argv[1], argv[2], clef, longueur_clef) ; return 0; }
int main(int argc, char *argv[0]) { int i,c; unsigned int longueur_clef; unsigned int *clef ; int booleen = FAUX; if (argc != 3) { fprintf(stderr, "\nErreur : nombre d’arguments invalide\n") ; fprintf(stderr, "Syntaxe : %s fichier_entree fichier_sortie\n", argv[0]) ; return(EXIT_FAILURE) ; } printf("\nEntrez la longueur de la clef sans espace (exemple : texte sans espace = 15 )\t") ; scanf("%u", &longueur_clef) ; clef = malloc(longueur_clef * sizeof(unsigned int)) ; printf("Entrez un mot clé ou une phrase clé de %d caractères (sans compter les espaces) : ",longueur_clef) ; c = getchar() ; i=0; while(i< longueur_clef) { c = getchar() ; if (c == 195) booleen = VRAI; else if (booleen == VRAI) { c = accent(c); booleen = FAUX; clef[i] = c - 97 ; i++ ; } else { if((c!=32) &&((c<65) || (c>90))) { clef[i] = c - 97 ; i++; } else { clef[i] = c - 65 ; i++; } } } dechiffrement(argv[1], argv[2], clef, longueur_clef); return 0; }