p
u
b
l
i
c
i
t
é

Codes sources C++

Ajouter un nouvel élément

Les performances du mois

Chiffrement RSA pour les nuls
2
OpenCV
1
Nombres Premiers
3

    ang OpenCV

    Éditeur : Intel +
    OpenCV (Open Source Computer Vision) est une bibliothèque visant principalement à la vision par ordinateur en temps réel. Elle a été initialement développé par Intel, et est maintenant soutenue par Willow Garage et Itseez. elle est gratuite pour une utilisation sous la licence open source BSD. La bibliothèque est multi-plateforme. Avec plus de 2500 algorithmes optimisés, elle comprend un ensemble complet d'algorithmes d'apprentissage classique et les dernières innovations en vision par ordinateur. Ces algorithmes peuvent être utilisés pour détecter et reconnaître des visages, identifier des objets, classer les actions humaines dans les vidéos, suivre les mouvements de caméra, suivre des objets en mouvement, extraire des modèles 3D d'objets, produire des nuages ​​de points 3D à partir de caméras stéréo, assembler des images pour produire des images haute resolution d'une scène, trouver des images similaires à partir d'une base de données d'image, supprimer les yeux rouges des images prises au flash, suivre les mouvements des yeux, reconnaître des paysages et établir des marqueurs pour superposer des réalités augmentées, etc

    ang Chiffrement RSA pour les nuls

    Licence : Libre
    Le principe de base de RSA est de considérer un message comme un (grand) nombre entier et de faire des calculs dessus pour le chiffrer.
    Les implémentations que l'on trouve dans le monde industriel utilisent des librairies de calcul sur des entiers arbitrairement longs très optimisées et difficiles à comprendre.
    Le but de ce petit programme est d'implémenter RSA sur des entiers "classiques" et sans la moindre optimisation pour mieux comprendre l'algorithme.

    Pour autant, cette implémentation est parfaitement conforme à l'algorithme RSA.
    Sa seule limitation est taille de la clef qui est de 31 bits au maximum.
    Ce qui donne un niveau de sécurité à peu près nul (il faut au moins 512 bits pour que l'on puisse commencer à parler de sécurité).

    Le type des entiers est 'big_int' qui peut être un long (32bits) ou un long long (64bits).
    Mais il peut être remplacé par n'importe quel type qui supporte les opérateurs d'affectation, d'arithmétiques classiques (*+/-%) et de comparaison.

    Le code est en c++ tout à fait standard, mais est livré avec un projet Visual Studio 2005.

    Hadrien Flammang - dec 2008

    ang Courbes elliptiques pour les nuls

    Licence : Libre
    Comprendre la cryptographie sur les courbes elliptiques sans (trop) entrer dans les détails théoriques.

    • Notion de base de la cryptographie avec des courbes elliptiques (elliptic curve = EC).
      On se donne une arithmétique dans laquelle on manipule des points et des entiers.
      On a une addition entre points (point + point -> point)
      On a une multiplication entre entiers et points (entier * point -> point)
      Toute la sécurité est basée sur le fait que, dans cette arithmétique :

        - connaissant un point P et un entier n, on peut facilement calculer le point nP
        - connaissant les points P et nP, il est très difficile de calculer n

      La notion de "facile/difficile" renvoie aux temps de calculs nécessaires.
    • Les courbes elliptiques
      Une courbe elliptique E est définie par une équation de la forme y² = x³ + ax² + b.
      Pour faire de la cryptographie, on se place dans le corps Z/pZ.
      La courbe E est alors définie par un triplet d'entiers ( a,b,p ) tels que
      • p premier
      • 0 < |a| < p
      • 0 < |b| < p
      • 4a³ + 27b² mod p != 0

      La courbe elliptique E est l'ensemble des paires d'entiers (x,y) tels que :
      y² mod p == ( x³ + ax² + b ) mod p

      Ensuite, on définit une addition pour les points de E.
      Attention : il ne s'agit pas d'une addition "simple" !
      Si P, Q et R sont 3 points de E tels que R = P + Q, alors on n'a pas Rx = Px + Qx et Ry = Py + Qy !
      C'est beaucoup plus compliqué : R est l'opposé du point d'intersection entre la droite PQ et E.
      beau schéma ici
      Pour plus de détails mathématiques, suivre les liens indiqués plus bas.
      Pourquoi définir une addition si compliquée ?
      Pour se donner une arithmétique satisfaisant les critères de sécurité nécessaires à la cryptographie.
      Une fois qu'on sait additionner des points sur E, on peut calculer 2P = P + P, 3P = P + 2P, nP = P + (n-1)P.
      On obtient donc une multiplication entre entiers et points de E.
      Sur une courbe elliptique on définit G, un "générateur" :
      Que quel que soit P un point de E, il existe un entier n tel que P = nG.
      Il peut exister plusieurs générateurs, mais il existe des points de E qui n'en sont pas.

    • Création des clés :
      Pour une courbe elliptique E de générateur G, on choisit un entier k.
      • la clef privée = (E,G,k)
      • la clef publique = (E,G,kG)

      Comme il est assez difficile de trouver E (i.e. a, b et p) et surtout G, on utilise des valeurs fournies
      par la littérature => Seul k reste à choisir.
      De plus, pour des raisons mathématiques qui ne seront pas développées ici, toutes les courbes elliptiques
      n'apportent pas le même niveau de sécurité.
      Pour faire de la cryptographie sûre, il est donc très important de choisir ces constantes dans la littérature.
      Elles font partie de la clef publique et peuvent donc être exposées sans perte de sécurité.
      En revanche, dans l'exemple développé ici, on s'autorise à utiliser des courbes quelconques.


    • Chiffrement/déchiffrement :
      Le message m est chiffré avec un algo symétrique et c'est la clef qui est "transmise" en utilisant une EC :
      • Chiffrement :
        On choisit un entier r dans { 1,p-1 } et on calcule S = rkG.
        A partir de S on dérive une clef de chiffrement symétrique K et on calcule m' = m chiffré par K.
        --> le message chiffré = la paire ( m' , rG )
      • Déchiffrement :
        On retrouve S = k(rG) dont on dérive K avec laquelle on déchiffre m'.



    Hadrien Flammang - mai 2013

    ang Nombres Premiers

    Éditeur : Kakou35 + 692 octets
    Vous entrez un nombre et le programme trouvera tous les nombres premiers compris entre 0 et votre nombre!

    ang Class Clavier

    Éditeur : ANDST 44 + 443 octets
    c'est une classe pour gérer les entrée clavier, comme la classe Scanner en java, pour utiliser il suffit de met next avec int, double, float, char, ou string

    Ex: nextInt("entrer un int");

    ang Un éditeur de réseau de places et transitions (RdP)

    Licence : GPL
    Un réseau de places et transitions est un réseau de Petri (Petri Net ou RdP) généralisé et non coloré (sans extensions).

    L'application PTNET Editor permettra de dessiner/editer graphiquement un tel réseau, de l'animer, de l'analyser en construisant et visualisant son graphe de couverture/accessibilité, de le convertir en fichier image et de le sauvegarder en tant que document PNML.

    1. Compiler l'application

    L'application a été développée et testée sous GNU/Linux OpenSUSE 12.3 (KDE). Elle est basée sur le Framework Qt 4.8.4 et utilise aussi:
    • Boost Graph Library 1.49 (BGL) pour construire le graphe de couverture/accessibilité d'un RdP (graphgenerator.cpp)
    • la bibliothèque GraphViz 2.28 pour visualiser le graphe convenablement (graphvisualizer.cpp).

    => Vous devez installer ces bibliothèques pour compiler le code source!

    Important: Pour éliminer les deux étapes suivantes (étape 2 et 3) et tester l'application directement, consultez le
    fichier source tabwidget.cpp et commentez les étape [0], [1] et [2] de la méthode bool validateXml(QFile& file, MessageHandler &messageHandler). Autrement dit, modifiez cette méthode pour qu'elle retourne toujours true indiquant que le document PNML est valide.

    2. PNML

    PNML (Petri Net Markup Language) est un format standard d'échange des réseaux de Petri. L'application est basée sur ce standard. Vous pouvez télécharger le grammaire (spécification) de ce language ici: http://www.pnml.org/grammar.php.

    Notre application est un éditeur des RdP sans extensions. Donc nous somme pas besoin de tous les fichiers de grammaire téléchargé. On va juste utiliser 4:
    • pnmlcoremodel.rng : Contient la définition de PNML Core Model.
    • ptnet.rng : Contient les déclarations des types ajoutées par les réseau de places et transitions : initialMarking (marquage initial d’une place) et inscription (poids d’un arc).
    • anyElement.xsd : Utilisé pour définir une grammaire non fournie par le standard PNML. Dans notre cas ceux sont les éléments ToolInfo.
    • conventions.rng: utilisé par ptnet.rng.

    3. Convertir les fichiers RNG

    Le grammaire PNML est décrit en langage RELAX NG (.rng). Celui ci est un langage de description de document XML alternative de XML Schema. RELAX NG n’est pas supporté par le module XML de la bibliothèque Qt. Donc on doit convertir les fichiers de format RNG en format XSD! A ce propos, on va utiliser l'outil Trang.

    Trang est un outil libre permettant de convertir des schémas RELAX NG en XML Schema. Vous pouvez le télécharger ici:http://code.google.com/p/jing-trang/downloads/list.

    Convertir les fichiers rng en des fichiers xsd ?

    1. Dans le répertoire /home/~Download/Trang, créez un dossier et le nommez rng.
    2. Créez un autre dossier dans le même répertoire /home/~Download/Trang et le nommez xsd.
    3. Copiez les 4 fichiers rng dans le dossier rng.
    4. Pour convertir les 4 fichiers, utilisez la commande : java -jar trang.jar -I rng -O xsd rng/ptnet.rng xsd/ptnet.xsd.
    5. les fichiers RNG sont maintenant convertis en fichiers XSD et copiés dans le dossier xsd.

    L'application va utiliser les 4 fichiers xsd pour valider un document PNML décrivant un RdP !

    Donc, vous devez procéder comme suit:

    6. Copier les 4 fichiers xsd dans le répertoire : ptnet/shemas
    7. Modifier le fichier anyElement.xsd en supprimant la balise xs:group et en ajoutant la balise contenue dans le fichier ptnet/shemas/anyElement.txt

    4. Tester l'application

    Une fois l'application est compilée et les fichiers XSD sont générés (étapes 1-5) et ajoutés au répertoire /ptnet/shemas et modifiés (étapes 6-7), vous pouvez le tester en utilisant les exemples contenus dans le dossier ptnet/examples.
    • Pour changer les attributs d'une Place, Transition ou un arc faite un double-clique sur l'élément correspondant.
    • Pendant l'animation d'un RdP et pour franchir (tirer) une transition faite un clique gauche sur elle.




    Bonne utilisation :)

    ang Animation en 2D

    Licence : Libre
    C'est une animation qui est à 100% écrite en qt (version5.2).Un personnage pousse une caisse,jusqu'a un endroit voulu, c'est une animation d'ou l'inspiration me provient d'un ancien jeu ,dont je ne connais plus le nom.

    ang [Math] Résolution d'équations différentielles (Runge-Kutta)

    Licence : Autre
    Ce code permet de résoudre une équation différentielle du premier ordre du type : dy/dx = f(x,y) avec des conditions initiales sur y et x.

    ang [Math] Polynômes

    Licence : Autre
    La gestion des Polynômes et des opérations qui y sont liées est un domaine récurrent en programmation. Cette petite classe a pour but de vous faciliter la vie en gérant à votre place les polynômes.

    ang [Conteneur] Tableau à 2 dimensions

    Licence : Autre
    Cette classe permet d'émuler un tableau de n lignes * m colonnes en utilisant le fait qu'accéder à l'élément situé ligne i, colone j revient à accéder à l'élément numéro i*n+j d'un tableau à une dimension de longeur m*n.

    ang [Qt 5] Les nouvelles possibilités de connexions signaux-slots dans Qt 5

    Licence : Libre
    Ce mini-projet Qt 5 présente les nouvelles possibilités de connexions entre signaux et slots proposées dans Qt 5 :
    - les connexions avec un pointeur de fonction ;
    - les connexions avec les fonctions lambdas.

    Pour en savoir plus, rendez-vous sur mon blog : Les signaux et slots dans Qt5

    ang Algorithme A*

    Licence : Gratuit
    Voici un exemple d'implémentation de l'algorithme A* réalisé par khayyam dans son article Recherche de chemin par l'algorithme A*

    ang [Math] Fractions

    Licence : Autre
    Le C++ ne propose aucune classe pour gérer les fractions ce qui peut être plus que gênant dans bon nombre de cas. Voici une petite classe pour palier à ce manque.

    ang [Math] Transformée de Fourier discrète

    Éditeur : C++ Cookbook + 1 Ko
    La transformée de Fourier est une opération mathématique permettant de décomposer une fonction en une somme de fonctions périodiques. Elle est essentielle dans de nombreux domaines comme par exemple le traitement du signal. Le code suivant offre une première version

    ang Interpréteur BrainFuck

    Licence : Autre
    Le BrainFuck est un tout petit langage interprété composé de 8 symboles.Malgré cette taille réduite il est turing complet, c'est à dire qu'on peut réaliser (en théorie) n'importe quel programme avec. Masthiks nous propose ici un interpréteur brainfuck codé en quelques centaines de lignes.

    ang Parcours en profondeur et tri topologique

    Licence : GPL
    Suite à ma précédente soumission, voici un code qui effectue un parcours en profondeur sur un graphe orienté sans circuit et qui en trie topologiquement les sommets.

    ang Mandelbrot

    Éditeur : regis.portalez + 550 Ko
    Génération de l'ensemble de mandelbrot et des ensembles de julia sur CPU & GPU
    Affichage dans une fenetre utilisant la SDL.
    Dependances : SDL.lib, SDLmain.lib, cudart.lib
    4 modes d'affichage : gray-level, gray-level-reversed, RGB random, Green (comme le logo).
    Navigation : zoom - unzoom, directionnelle, reinitialisation, augmenter resolution, diminuer resolution, retour en arriere
    Pour représenter l'ensemble de julia associé à un point du plan : faire un clic du milieu.
    Pour revenir au mandelbrot : clic du milieu n'importe où

    Multiplateforme (Windows - Linux) [ j'ai jamais developpé sous mac, mais j'imagine que ça marche aussi ;) ]

    Update : Support cuda pour le calcul. Editer le fichier params.h et mettre les valeurs correspondant à votre carte graphique
    g_block_dim // g_grid_dim
    PLATFORM : utiliser CUDA pour travailler sur GPU, CPU pour rester sur CPU.

    Résultats obtenus sur le calcul de l'ensemble (le plot est limitant avec la SDL...) pour maxiter = 20, image 256x256

    CPU : Xeon W3550 @ 3.07 GHz : 240 FPS
    GPU: Geforce GT470 : 1000 FPS ( g_block_dim = 256 // g_grid_dim = 32 ) (image 1024-1024)


    EDIT : projet visual c++ 2008 joint

    ang OpenGL et Gtkmm – dixième partie

    Licence : Libre
    Conversion du dixième tutoriel OpenGL NeHe utilisant Gtkmm et GtkGlExtmm. La construction est gérée par CMake, le fichier « LISEZMOI.txt » donne la procédure de compilation, qui est très simple et standard : lancez CMake, puis faite la compilation à partir de votre environnement de programmation de manière classique.

    ang Factorisation en nombres premiers

    Licence : Autre
    Entrez un nombre quelconque, et le programme donne la factorisation en nombres premiers de celui-ci.
    Au début il faut indiquer au programme le nombre de nombres premiers à générer qui serviront de base au programme pour la factorisation des nombres entrés.

    ang OpenGL et Gtkmm – première partie

    Licence : Libre
    Conversion du premier tutoriel OpenGL NeHe, afin d’utiliser Gtkmm et GtkGlExtmm. La construction est gérée par CMake, le fichier « LISEZMOI.txt » donne la procédure de compilation, qui est très simple et standard : lancez CMake, puis faite la compilation à partir de votre environnement de programmation de manière classique.

78 éléments

Responsable bénévole de la rubrique C++ : Francis Walter -