Bonsoir,

alors je suis sur une fonction de cryptage de mon programme qui consiste à lire une texte_bin.txt qui contient :

00010110 (plusieurs blocs de 8bits les uns apres les autres)
11110010
11100011
...

et un autre cle_publique.txt qui contient une suite B(i) :

1 2 5 10 20 30 40 50

Le but de la fonction est de faire pour chaque ligne ( chaque bloc de 8bits) la somme de chaque bit * B(i)

Exemple :

Pour la ligne 1, on a 00010110
on fait donc 0*1 + 0*2 + 0*5 + 1*10 + 0*20 + 1*30 + 1*40 + 0*50 = C1

En gros c'est de la forme C1 = bit1*B(1)+ bit2*B(2) + ... + bit2*B(8)
Et de cette manière on obtient une autre suite C(i)
avec i=nombre de ligne soit de bloc de 8 bits.

Voila le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
int calcul_de_c()
{
    int i;   
    int j;
    FILE *ficbi;
    unsigned long B[8];	
    FILE *fp;
	char tampon[512];
	char ligne_lue[512];
	int nombre_de_ligne = 0;	
	unsigned long C[8];
	int h;
 
 
	ficbi = fopen("cle_publique.txt","r");
    if (ficbi != NULL)
         {     
        printf("\n\n      Pour le cryptage, la suite B(i) sera : \n\n");
 
        fscanf(ficbi,"%d %d %d %d %d %d %d %d ",&B[1] ,&B[2] ,&B[3] ,&B[4] ,&B[5] ,&B[6] ,&B[7] ,&B[8]);
 
        printf("      ");
        for (h=1;h<9;h++)
           {
 
            printf("%d ",B[h]);
           }
        printf("\n\n");
        system("PAUSE");   
}
 
	fp=fopen("texte_bin","r");
	if ((fp = fopen("texte_bin.txt","r")) == NULL)
	{
		printf("Impossible d'ouvir le fichier\n\n");
		return 0;
	}
	else
	{
		// Calcule le nombre de lignes dans le fichier texte
		while(fgets(ligne_lue, sizeof(ligne_lue), fp) != NULL)
		{
			nombre_de_ligne++;
		}
 
		// Positionne le curseur au début du fichier
		fseek(fp,0,SEEK_SET);
 
 
 
		for ( i = 0 ; i < nombre_de_ligne ; i++)
		{
			// Lire les données mises en forme
            fscanf(fp,"%s",tampon);
            C[i]=0;
 
			for ( j = 0 ; j < 8 ; j++)
			{
				// Calcul le résultat voulu
				if (tampon[j] == '1')
				C[i] += B[j];
 
			}
			printf("\n\n");
			// Affiche le contenu du fichier
			printf("%s",tampon); 
			// Affiche les résultats voulus
 
			printf("  --->  C (%d) = %d ",(i+1),C[i]);
		}
 
        printf("\n\n  CRYPTAGE OK !!!\n  La suite de C est sauvegardee dans texte_crypte.txt\n\n"); 
              FILE * f = fopen("texte_crypte.txt", "w");
 
        if (f != NULL)
         {
                      for (i=0;i<nombre_de_ligne;i++)
           {
                 fprintf(f, "%d ",C[i]);
           }      
                 fclose(f);
         }
 
		printf("\n\n");
		printf("\n\n");
   }
 
system("PAUSE");
}
Mais j'ai un problème ,il effectue bien les opérations mais ne prend pas en compte le 1er bit de chaque ligne, et m'affiche pour C1 et le dernier C des nombres astronomiques...

Auriez vous une idée SVP