Exéution c++

emnaisecs -  
 Utilisateur anonyme -
Bonjour,



sVP j'ai un problème en c++ lors de son exécution le console fournit une fréquence de résultat faible mais lorsque je fé son éxécution détaille et je fé des point d'arret j'observe que l'algorithme tourne convenablement
aidez-moi svp
merciiiii

5 réponses

Utilisateur anonyme
 
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.
0
emnaisecs
 
d'accord , j'ai un code c++ qui fait le cryptage et le décryptage losrque je débougue le programme il me donne des résultats fausse cad le message d'entré n'est pas le méme que le msg de sorti . et losrque je fé le débouguement pas a pas je remarque que l'algorithme tourne convenablement merci de m'aider
0
emnaisecs
 
class cryptage
{ 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;
}
}
};
0
emnaisecs
 
class decryptage
{
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;
}
}
};
0
emnaisecs
 
l'algorithme RSA C'est la cryptographie utilisé
0
emnaisecs
 
merci pour ces astuces ^^
0
Utilisateur anonyme
 
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é.
0
Utilisateur anonyme
 
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 ?
0
emnaisecs
 
merci pour ces astuces ^^ :D
0
emnaisecs
 
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();
}
>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
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.
0