5 réponses
Bonjour
Quelle fréquence de résultat ? Quel algorithme ?
On veut bien t'aider, mais il faut expliquer ton problème un peu plus en détail que ça.
Quelle fréquence de résultat ? Quel algorithme ?
On veut bien t'aider, mais il faut expliquer ton problème un peu plus en détail que ça.
Si tu n'obtiens pas le même message en enchaînant cryptage et décryptage, c'est que ton algorithme est mauvais ou mal implémenté.
S'il s'agit d'un cryptage connu, tu peux peut-être trouver un autre programme pour comparer ses résultats avec le sien.
Peux-tu mettre le code ? Nous pourrons le regarder, s'il n'est pas trop compliqué.
S'il s'agit d'un cryptage connu, tu peux peut-être trouver un autre programme pour comparer ses résultats avec le sien.
Peux-tu mettre le code ? Nous pourrons le regarder, s'il n'est pas trop compliqué.
Tout d'abord, merci d'utiliser 'Répondre à la question' pour répondre à la question. 'Ajouter un commentaire' ne devrait servir qu'à faire des commentaires.
Ensuite, quand tu postes du code, utilise les balises < code > ( le bouton avec <> en haut de la fenêtre de saisie des messages, parce le code que tu as posté est illisible.
Enfin j'en viens à ton problème. Avec quelle valeur du paramètre e1 as-tu essayé ton algorithme ? Il y a une élévation à la puissance qui provoque probablement un débordement. As-tu essayé avec e1 = 1 ?
Ensuite, quand tu postes du code, utilise les balises < code > ( le bouton avec <> en haut de la fenêtre de saisie des messages, parce le code que tu as posté est illisible.
Enfin j'en viens à ton problème. Avec quelle valeur du paramètre e1 as-tu essayé ton algorithme ? Il y a une élévation à la puissance qui provoque probablement un débordement. As-tu essayé avec e1 = 1 ?
alors
les codes que j'ai envoyé ce sont des classes
j'ai fé l'essai avec e
< void main()
{ int flag[30];
unsigned long long p =0, q = 0 ;
int i,phi,n,e= 0,d=0,s,C,FLAG=0;
long double x, y;
unsigned long int div, div1;
char M[50];
printf(" le premier nombre premier p \t: " );
do
{
p = myRandom();
}
while(!Miller(p,5));
printf ("%d\n", p);
printf(" le deuxieme nombre premier q \t: " );
do
{
q = myRandom();
}
while(!Miller(q,5));
printf ("%d", q);
n = p*q;
phi=(p-1)*(q-1);
printf("\n\tF(n)\t= %d",phi);
{
printf("\n\nEnter e\t: " );
scanf("%d",&e);
}while(FLAG==1);
d = 1;
do
{
s = (d*e)%phi;
d++;
}while(s!=1);
d = d-1;
printf("\n\tPublic Key\t: {%d,%d}\n",e,n);
printf("\n\tPrivate Key\t: {%d,%d}\n",d,n);
printf("Entrer le message \n" );
scanf("%s",M);
for(int i=0;i<strlen(M);i++)
{
flag[i]=0;
if(M[i]>='a'&& M[i]<='z')
flag[i]=1;
else
continue;
}
printf("Encryption:\n" );
cryptage CR = cryptage(e, M);
CR.crypt( e , M, n);
printf("%s",M);
/*printf("\nEntrer le message crypter\n" );
scanf("%s",M);*/
printf("\nDecryption:\n" );
decryptage D = decryptage( d, M);
D.decrypt(d ,M , n);
printf("%s",M);
getch();
}
>
les codes que j'ai envoyé ce sont des classes
j'ai fé l'essai avec e
< void main()
{ int flag[30];
unsigned long long p =0, q = 0 ;
int i,phi,n,e= 0,d=0,s,C,FLAG=0;
long double x, y;
unsigned long int div, div1;
char M[50];
printf(" le premier nombre premier p \t: " );
do
{
p = myRandom();
}
while(!Miller(p,5));
printf ("%d\n", p);
printf(" le deuxieme nombre premier q \t: " );
do
{
q = myRandom();
}
while(!Miller(q,5));
printf ("%d", q);
n = p*q;
phi=(p-1)*(q-1);
printf("\n\tF(n)\t= %d",phi);
{
printf("\n\nEnter e\t: " );
scanf("%d",&e);
}while(FLAG==1);
d = 1;
do
{
s = (d*e)%phi;
d++;
}while(s!=1);
d = d-1;
printf("\n\tPublic Key\t: {%d,%d}\n",e,n);
printf("\n\tPrivate Key\t: {%d,%d}\n",d,n);
printf("Entrer le message \n" );
scanf("%s",M);
for(int i=0;i<strlen(M);i++)
{
flag[i]=0;
if(M[i]>='a'&& M[i]<='z')
flag[i]=1;
else
continue;
}
printf("Encryption:\n" );
cryptage CR = cryptage(e, M);
CR.crypt( e , M, n);
printf("%s",M);
/*printf("\nEntrer le message crypter\n" );
scanf("%s",M);*/
printf("\nDecryption:\n" );
decryptage D = decryptage( d, M);
D.decrypt(d ,M , n);
printf("%s",M);
getch();
}
>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu n'as pas utilisé les bonnes balises. Ol ne s'agit pas de mettre < avant et > après, il faut sélectionner tout le code et cliquer sur le bouton <>.
Ceci ajoute une balise < code avant et une balise </ code> après. ET tu peux utiliser le bouton prévisualiser pour voir que ça marche.
Je ne vois pas avec quelles valeur de e tu as crypté. Jusqu'à preuve du contraire, je suppose que lors de l'élévation à la puissance, que tu fais par une multiplication répétée sur des int, il y a débordement.
De plus, je viens de jeter un coup d'oeil à la page de wikipedia sur l'algorithme RSA, et je ne vois pas comment justifier tes bricolages avec les lettres majuscules / minuscules.
Ceci ajoute une balise < code avant et une balise </ code> après. ET tu peux utiliser le bouton prévisualiser pour voir que ça marche.
Je ne vois pas avec quelles valeur de e tu as crypté. Jusqu'à preuve du contraire, je suppose que lors de l'élévation à la puissance, que tu fais par une multiplication répétée sur des int, il y a débordement.
De plus, je viens de jeter un coup d'oeil à la page de wikipedia sur l'algorithme RSA, et je ne vois pas comment justifier tes bricolages avec les lettres majuscules / minuscules.
{ public:
int e,i;
char M[50];
int flag[30];
cryptage(int e1, char M1[50])
{
e=e1;
*M=*M1;
}
/*int funct(char M)
{
int x;
for (int i=0; i< strlen(M); i++)
{
if(M >='a'&& M <='z')
x=M -96;
if(M >='A'&& M <='Z')
x=M -64;
x = static_cast<int>(M);
}
return x;
} */
void crypt(int e , char M[50], int n)
{
int phi, s, c[30];
long long int x;
unsigned long long int div;
char cc;
for(int i=0;i<strlen(M);i++)
{
flag[i]=0;
if(M[i]>='a'&& M[i]<='z')
flag[i]=1;
else
continue;
}
for(int i=0;i < strlen(M);i++)
{
/* s=funct(M[i]);
for (int j= 0; j<e; i++)
x= s * cccc ;
div= (unsigned long int)x;
c[i]=fmod(div,n);}*/
s = static_cast<int>(M[i]); //convertir en code ascii
if(flag[i]==0)
s=s-64;
else
s=s-96;
//printf("%d",s);
x=1;
for(int j=0; j<e;j++)
x=x*s;
// x=pow(((long int)s),((long int)e));
div=(unsigned long long int)x;
c[i]=div%n;
//printf ("%d",c[i]);
if(flag[i]==0)
//printf("%c",(c[i]+64));
c[i]=c[i]+64;
else
//printf("%c",(c[i]+96));
c[i]=c[i]+96;
cc = static_cast<char>(c[i]); //convertir en char
// printf ("%c",cc);
M[i]=cc;
}
}
};
{
public:
int n,d, phi, ss, p2[30];
long long int y;
unsigned long long int div1;
char M[50];
int flag[30];
decryptage(int d1,char M1[50])
{
d=d1;
*M=*M1;
}
/*int funct(char M)
{
int x;
for (int i=0; i< 500; i++)
{
if(M >='a'&& M <='z')
x=M -96;
if(M >='A'&& M <='Z')
x=M -64;}
return x;
} */
void decrypt(int d , char M[50], int n)
{
//int cccc=1;
char pp;
for(int i=0;i<strlen(M);i++)
{
flag[i]=0;
if(M[i]>='a'&& M[i]<='z')
flag[i]=1;
else
continue;
}
for(int i=0; i < strlen(M);i++)
{
/*for (int j= 0; j<d; j++)
y= ss * cccc ;
div1= (unsigned long int)y;
p2[i]=div1%n;}*/
ss = static_cast<int>(M[i]);
if(flag[i]==0)
ss=ss-64;
else
ss=ss-96;
y=1;
for(int j=0; j<d;j++)
y=y*ss;
// y=pow(((long int)ss),((long int)d));
div1=(unsigned long long int)y;
p2[i]=div1%n;
if(flag[i]==0)
p2[i]=p2[i]+64;
// printf("%c ",(p2[i]+64));
else
p2[i]=p2[i]+96;
//printf("%c ",(p2[i]+96));
pp = static_cast<char>(p2[i]);
// printf ("%c",pp);
M[i]=pp;
}
}
};