RSA en c++ : tentative

Fermé
cor3ntino10 Messages postés 10 Date d'inscription mercredi 18 février 2015 Statut Membre Dernière intervention 19 février 2015 - 18 févr. 2015 à 21:13
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 21 févr. 2015 à 15:52
Bonjour, je suis un amateur de programmation en C++; j'ai voulu faire un programme de chiffrement RSA mais j'ai un probleme lors du décryptage comme vous pouvez le voir sur l'image mais je ne comprend pas où ca coince ..
Merci de votre aide !







#include <iostream>
#include <string>
#include <cmath>
#include <stdio.h>
#include <math.h>

using namespace std;

int main()
{

unsigned long long int p; unsigned long long int F; unsigned long long int d=1; unsigned long long int k;
unsigned long long int q; unsigned long long int T; unsigned long long int M; unsigned long long int G; long double h;
double n; unsigned long long int e=1; long double c; long double w; long double y;

cout << "P et Q deux nombres premiers" << endl;
cout << "P= ";
cin >> p;
cout << "Q= ";
cin >> q;

n=q*p;
cout << "n= " << n << endl;

F=((p-1)*(q-1));
cout << "F= " << F << endl;

do
{
    e = e + 1;
    if (F % e == 1)
    {
        break;
    }

} while (e < F);
cout << "e= " << e << endl;

do
{
    d = d + 1;

} while (((e*d)%F) != 1);
cout << "d= " << d << endl;

cout << endl;

cout << "Cle publique: (" << n << ";" << e << ")" << endl;
cout << "Cle privee: (" << n << ";" << d << ")" << endl;

cout << endl;

cout << "TEST:" << endl;
cout << "Codage " << endl;
cin >> M;
c=pow(M,e);
if (c >= n)
{
    c=(fmod(c,n));

}
cout << "Se crypte en: " << c << endl;

cout << endl;

cout << "Decodage " << endl;
cin >> G;
h=pow(G,d);
if (h>=n)
{
    h=(fmod(h,n));

}

cout << "Se decrypte en: " << h << endl;
}
A voir également:

3 réponses

lepro34 Messages postés 124 Date d'inscription mardi 12 août 2014 Statut Membre Dernière intervention 3 juin 2016 5
18 févr. 2015 à 22:34
Ok je pourrait t'aider car moi aussi je suis un fan du c++ et je suis devenu un pro.

Quel logiciel utilise tu pour coder?
0
cor3ntino10 Messages postés 10 Date d'inscription mercredi 18 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 07:43
J'utilise Code block ! J'avais commencé a apprendre avec le site du zéro maintenant nommé openclassroom ! Merci bien
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
19 févr. 2015 à 12:10
et je suis devenu un pro
Et normalement un "pro" du C++ n'en a que faire de l'IDE utilisé, là le problème il est coté code.
0
cor3ntino10 Messages postés 10 Date d'inscription mercredi 18 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 12:13
Je ne comprend pas pourquoi le decrypatge ne marche pas alors que je l'ai fait de la même que le cryptage mis à part que la puissance change pour décoder .. Le e devient d
0
Salut, fmod c'est pour les virgules flottantes, en cryptographie la moindre approximation fausse tout.
0
cor3ntino10 Messages postés 10 Date d'inscription mercredi 18 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 12:46
Oui je sais mais le problème c'est que si je met (h%n) ça ne marche pas car ça suppose que j'ai déclarer mes variables comme long int; or avec de telles variables je pourrai faire que de très petites puissances .. Je suis obligé de passer par ça pour pouvoir mettre des nombres assez grands ..
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228 > cor3ntino10 Messages postés 10 Date d'inscription mercredi 18 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 12:48
Mais les nombres a virgule flottante souffrent d'importants problèmes de précision, surtout quand le nombre est très grand ou très petit, ce qui fausse tous les calculs cryptographiques.
0
cor3ntino10 Messages postés 10 Date d'inscription mercredi 18 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 12:50
Mais meme si je les déclare en double ou float, ils ne prennent comme valeur que des nombres entiers .. Je pensais donc que cela n'influerait pas et me permettrait d'avoir des nombres entiers de grandes tailles
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228 > cor3ntino10 Messages postés 10 Date d'inscription mercredi 18 février 2015 Statut Membre Dernière intervention 19 février 2015
Modifié par gravgun le 19/02/2015 à 12:56
Des flottants entiers ont moins de précision que les types intégraux qui leur sont analogue: les
double
s n'ont que 52 bits de mantisse, or ils prennent autant de place qu'un
long long int
: 64 bits. Donc moins de place pour le nombre.
Si tu veux faire joujou avec des entiers ou flottants de précision arbitraire, regarde du coté de GMP.
0
cor3ntino10 Messages postés 10 Date d'inscription mercredi 18 février 2015 Statut Membre Dernière intervention 19 février 2015
19 févr. 2015 à 12:55
Ah d'acc du coup tu me conseilles d'utiliser quoi plutot comme type de variables ?
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
21 févr. 2015 à 15:52
Bonjours
Avant tout quand on est un pro de la programmation comme certains le revendiquent en ne dit pas cryptage car c'est un procéder et d'ailleurs, dans le domaine informatique, mathématique ou cryptographique, On n'utilise pas le terme ou le mot cryptage, mais chiffrement tout comme il y a une différence bien distincte entre codage et chiffrement ou cryptage.
De plus la méthode que vous essayer d'implémenté est dite chiffrement asymétrique RSA et non cryptage; le cryptage est l'ensemble des procédés de chiffrement RSA. En cryptographier pour résumer, un texte ou donner brut en clair est appelé Texte clair ou donné non chiffrer sa version chiffré est appelé texte ou donnée chiffrer donc le chiffrement a pour objectif de transformer les données non chiffrés en donnée chiffré et le déchiffrement est quant à lui le contraire du chiffrement. Le ou les informations de conversions ( claire to chiffré or chiffré to déchiffré) sont appelés clés cryptographiques ou clé de chiffrement .

Le Code source écrit par @cor3ntino10 n'est pas aux points et ne présente rien d'un chiffrement asymétrique; dès le départ les données du problème sont mal comprises et ce n'est pas une de ses différentes instructions qui vont fournir un chiffrement ou détermine de très grands nombres premiers. Vous allez dire qu'un ordinateur ne peut travailler avec de si grand nombre et que certaines machines sont limitées à 64 bits. Oui et des professionnels vous diront utilisé un langage de programmation qui permet de travailler avec de si grand nombre; exemple le langage python qui permet de manipuler des entiers de taille non fixés; "Alors le RSA ne peut être implémenté en langage C ? et comment faire pour générer un si grand nombre " oublié la programmation un moment, car ce n'est plus du domaine informatique mais le domaine des mathématiques et de l'algorithmique (les fondation de la cryptographie) qui dans le cas des mathématique, va nous permettre de savoir si ont peut générer de très grand nombres et si possible fixé une limite Max, l'algorithmique quant à elle, nous permettra d'élaborer un ou des algorithmes nous permettant d'implémenté notre résolution mathématique "mais comment ?" exemple :
 x^M mod n 
comprend tu ?" c'est a dire qu'on pourras avoir que des nombres compris entre 0 & n-1" oui "donc on peut par déduction fixé la taille de 'n' "oui et tu était pas loin" mais quel type de variable choisir pour de si grand nombre ?" cela dépendra de la borne max en clair, "n-1" "ça veut dire qu'on peut implémenter RSA en langage C ou C++? " oui."

(GMP pourquoi ?) bref.
Les tutoriels c'est bien mais, vaut mieux ne pas prendre comme argent comptent tout ce qui est écrit. Retourné sur le site du tutoriel mentionné dans les précédents postes vous verrez qu'il utilise une bibliothèque ou un programme déjà écrit pour argumenter le sujet, mais en aucun cas en vous expliqueras comment c'est différentes procédures / algorithme on été implémenté. Beaucoup de novices pourront chiffrer en RSA en suivant le tutoriel c'est le bute recherché , mais que savent ils réellement sur son fantastique algorithme ou les formidables technique mathématique qui ont aboutie à une telle prouesse ? "faut savoir reconnaître et admirer l'élégance mathématique mais aussi de de la physique père de l'électronique". Ils sauront chiffrer et RSA mais ... qu'est-ce qu'ils ont appris où compris, pourront-ils écrire une variante de chiffrement asymétrique d'eux même où ils vont encore à nouveau chercher des tutoriels traitant des variantes de chiffrement asymétrique ?.

En conclusion, commencer par comprendre les algorithmes ensuite implémenté les procédure permettant de réaliser un chiffrement asymétrique RSA.
Puis choisissez un langage procédurale ou fonctionnel qu'un langage orienté objet.
Et au final amuser vous à chiffrer déchiffrer des donnés et pour ceux qui sont vraiment des professionnels amusez-vous à déchiffrer une donnée sans connaître la clé de chiffrement.

Débuter avec Euclide "plus grand diviseur commun cours de quatrième (les PGCD) " ensuite écrire l'algorithme Euclide et sur la base du même algorithme adapté là afin de rechercher deux nombres premiers entre eux et après ça, exploré d'autre horizon exemple mettre très rapidement des nombre en puissance , générer des nombre premier etc. après tout ça vous y verrez plus clair et la difficulté de la "choses".
à bientôt.

0