begin process at 2012 05 27 18:42:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > MINI RSA (CRYPTAGE ASYMÉTRIQUE)

MINI RSA (CRYPTAGE ASYMÉTRIQUE)


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité & Cryptage Classé sous :crytographie, RSA, démonstrateur, simple, exemple Niveau :Initié Date de création :10/12/2008 Date de mise à jour :10/12/2008 14:47:27 Vu / téléchargé :5 624 / 456

Auteur : gaspos

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Toute petite bibliothèque qui implémente l'algorithe de cryptage asymétrique RSA sur des nombres entiers natifs (long ou long long).
Elle permet de comprendre le fonctionnement de cet algorithme qui est souvent noyé au milieu d'une bibliothèque très touffue et optimisée (type open ssl).
Mais avec une clef sur une trentaine de bits, le niveau de sécurité est beaucoup trop faible pour un quelconque usage serieux.
Tout petit projet Visual 2005 en mode console.
Un header + body d'implementation de la librairie + body de test.

Source

  • namespace mini_rsa
  • {
  • // type des entiers utilisés comme clef
  • typedef long long big_int ; // doit être un type entier signé
  • // partie entière du log en base 2 de la plus grande valeur possible d'un 'big_int' (ici log( 2^63-1 ) == 62)
  • const int log_big_int = 62 ; // attention : cette valeur doit être mise à jour si bit_int est changé.
  • // nb max de bits utilisables
  • const int max_nb_bit = log_big_int/2 ; // comme on a des multiplications, on ne peut utiliser que la moitié des bits
  • // renvoie un entier aléatoire sur nb_bit bits (le bit de poids fort étant toujours à 1)
  • // cette fonction n'est là que pour les tests.
  • big_int random ( int nb_bit ) ;
  • // génère une bi-clef (= paire clef publique + clef privée) sur nb_bit
  • // la clef privée = paire ( pri,mod ) et la clef publique = paire ( pub,mod )
  • void compute_keys ( int nb_bit , big_int * pub , big_int * pri , big_int * mod ) ;
  • // chiffrement (= déchiffrement avec la clef réciproque)
  • // 'message' contient le message à chiffrer/dechiffrer sous forme d'un
  • // entier qui doit être inferieur à 'mod'.
  • // le paramètre 'exp' doit recevoir le 'pub' ou le 'pri' sorti de 'compute_keys'.
  • // le paramètre 'mod' doit recevoir le 'mod' sorti de 'compute_keys'.
  • // le paramètre 'message' contient le message à chiffrer.
  • // (Attention : C'est l'appelant qui doit convertir son buffer de données en 'big_int'.)
  • // le retour est le message chiffré.
  • big_int encrypt ( big_int exp , big_int mod , big_int message ) ;
  • }
namespace mini_rsa
{

// type des entiers utilisés comme clef
typedef long long big_int ;  // doit être un type entier signé

// partie entière du log en base 2 de la plus grande valeur possible d'un 'big_int' (ici log( 2^63-1 ) == 62)
const int log_big_int = 62 ; // attention : cette valeur doit être mise à jour si bit_int est changé.

// nb max de bits utilisables
const int max_nb_bit = log_big_int/2 ; // comme on a des multiplications, on ne peut utiliser que la moitié des bits

// renvoie un entier aléatoire sur nb_bit bits (le bit de poids fort étant toujours à 1)
// cette fonction n'est là que pour les tests.
big_int random ( int nb_bit ) ;

// génère une bi-clef (= paire clef publique + clef privée) sur nb_bit
// la clef privée = paire ( pri,mod ) et la clef publique = paire ( pub,mod )
void compute_keys ( int nb_bit , big_int * pub , big_int * pri , big_int * mod ) ;

// chiffrement (= déchiffrement avec la clef réciproque)
// 'message' contient le message à chiffrer/dechiffrer sous forme d'un
// entier qui doit être inferieur à 'mod'.
// le paramètre 'exp' doit recevoir le 'pub' ou le 'pri' sorti de 'compute_keys'.
// le paramètre 'mod' doit recevoir le 'mod' sorti de 'compute_keys'.
// le paramètre 'message' contient le message à chiffrer.
//    (Attention : C'est l'appelant qui doit convertir son buffer de données en 'big_int'.)
// le retour est le message chiffré.
big_int encrypt ( big_int exp , big_int mod , big_int message ) ;

}

 Conclusion

Destinée à tous ceux qui veulent comprendre le détail de cet algo omniprésent dans le monde de la crypto, mais qui n'ont pas un réél besoin de sécurité.
Si quelqu'un s'amuse à définir une classe de nombres entiers arbitrairement longs dont les opérateurs classiques sont définis, cette bibliothèque pourra offrir une vraie sécurité.
Encore plus simple : la recoder en Python ou Ruby qui offrent déjà des entiers arbitrairement longs. Mais bien sûr, ces langages proposent déjà des fonctions de cryptage RSA.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

10 décembre 2008 14:47:27 :
Pas de modif mais une retouche après prévisualisation. (petit bug dans le site ? la prévisalisation semble avoir des effets définitifs...)

 Sources de la même categorie

PROJET DE CRYPTOGRAPHIE: RSA À JEU REDUIT D'INSTRUCTION par samatarahmed
Source avec Zip Source avec une capture CRYPTOSYSTÈME ELGAMAL LIBRAIRIE GMP par louelh95
Source avec Zip Source .NET (Dotnet) NOUVEL ALGORITHME D'ENCRYPTION-DÉSENCRYPTION DYNAMIQUE (INFA... par vletktol
Source avec Zip A2DCRYPT - CRYPTAGE 2048 BITS par darkor
Source avec Zip Source avec une capture CRYPTEUR-DÉCRYPTEUR-IP par antho974

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SECURE REMOTE SHELL [WIN32] par ganjarasta
PROJET DE CRYPTOGRAPHIE: RSA À JEU REDUIT D'INSTRUCTION par samatarahmed
Source avec Zip Source .NET (Dotnet) NOUVEL ALGORITHME D'ENCRYPTION-DÉSENCRYPTION DYNAMIQUE (INFA... par vletktol
Source avec Zip Source avec une capture CLIENT IRC SIMPLE AVEC DEV-CPP par TeniX
Source avec Zip CODEUR DE HUFFMAN par webis

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

impression [ par Live2Die ] Je suis programmeur pascal et j'ai voulu me mettre au c++J'ai presque termener mon premier programme, mais un probleme persiste... je ne peux imprimer Hors programmation... [ par NitRic ] Seulement une petite suggestion: Il serait bien d'indiquer dans les message(demande d'aide) quel compilateur on utilise... Pourquoi je dit ca:Allez vo Simple curiosité [ par Mike ] Je voudrais savoir quel langage de programmation utilise les fabricants des meilleurs jeux vidéos tel que Fifa, cycling manager, ... ?Merci d'avance. Question simple [ par SysBreak ] Salut, j'ai Borland C++ 5 v.pro et j'aimerais savoir dans quel répertoire je dois enregistrer mes fichiers sources créés ? Pour les projets j'ai bien Qui à l'intention de créer un projet simple sur les base de données ? [ par Lallthis ] Le genre de projet où on ouvre un base, on écris dedans,et on recherche un élément. [debutant] Simple mais comment faire [ par Coyito ] bonjourj'ai dans mon prgint *b;b est un pointeur vers un int, comment puis connaitre la valeur de cet int sans modifier le programme en amont ???Merci une question toute simple.. aidez moi, stp!!! [ par xose ] Je viens d'installer le Borland C++. Une fois que le programme est compilé, la fenetre noire disparait toute suite!! Je n'arrive pas à voir jamais les Exemple de EnumPrinters (qui fonctionne) en C++ [ par nico ] Je voudrais que mon programme puisse détecter l'imprimante par défaut utilisée par mon PC. Pour ce faire j'ai trouvé la fonction "EnumPrinters". Le pr Sortie formatée avec printf: précision [ par GoldenEye ] J'ai besoin d'afficher avec printf un double avec une précision dynamique.Par exemple, l'user rentre une précision epsilon( 0.01 par ex ) et je veux l Deamde toute simple [ par GoldenEye ] Vous allez dire que Nix est un dictateurVous allez dire que Jo est un emmerdeurVous allez dire que je suis un chieurSi Jo vous demande sans cesse de m


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales