{"id":5783,"date":"2025-12-13T15:18:18","date_gmt":"2025-12-13T14:18:18","guid":{"rendered":"https:\/\/workboot.fr\/ciela\/?page_id=5783"},"modified":"2025-12-13T18:45:04","modified_gmt":"2025-12-13T17:45:04","slug":"hash-en-c","status":"publish","type":"page","link":"https:\/\/workboot.fr\/ciela\/hash-en-c\/","title":{"rendered":"hash en c"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Pr\u00e9sentation du hash:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un hash, c&rsquo;est une empreinte digitale num\u00e9rique unique et de taille fixe cr\u00e9\u00e9e \u00e0 partir de n&rsquo;importe quelle donn\u00e9e, qui permet de l&rsquo;identifier et de v\u00e9rifier qu&rsquo;elle n&rsquo;a pas \u00e9t\u00e9 modifi\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple de fonctions de hashage sous linux<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 1. <strong>md5sum<\/strong> - Donne un \"code\" de 32 caract\u00e8res\necho \"hello\" | md5sum\n# R\u00e9sultat : 5d41402abc4b2a76b9719d911017c592\n\n# 2. <strong>sha256sum<\/strong> - Code plus long (64 caract\u00e8res)\necho \"hello\" | sha256sum\n# R\u00e9sultat : 2cf24dba5fb0a30e...\n\n# 3. V\u00e9rifier qu'un fichier n'a pas \u00e9t\u00e9 modifi\u00e9\nsha256sum mon_fichier.txt &gt; checksum.txt\n# Plus tard...\nsha256sum -c checksum.txt  # V\u00e9rifie si le fichier a chang\u00e9<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Code en C  simple pour la p\u00e9dagogie  , hash.c<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">usage:<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>etudiant@ordi:~\/Works\/hash$ .\/hash -h\nUsage: .\/hash &#91;options] \"chaine a hasher\"\nOptions:\n  -s    Utiliser l'algorithme simple (defaut)\n  -d    Utiliser l'algorithme djb2\n  -m    Utiliser l'algorithme sdbm\n  -a    Afficher tous les algorithmes\n  -h    Afficher cette aide\netudiant@ordi:~\/Works\/hash$ \n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">code: hash.c <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;stdio.h>\n#include &lt;string.h>\n#include &lt;stdlib.h>\n\n\/* \n * Fonction de hachage simple inspir\u00e9e de djb2\n * Retourne une valeur de hash non-sign\u00e9e\n *\/\nunsigned long int hash_djb2(const char *str)\n{\n    unsigned long int hash = 5381;\n    int c;\n    \n    if (str == NULL)\n    {\n        return 0;\n    }\n    \n    while ((c = *str++) != '\\0')\n    {\n        \/* hash * 33 + c *\/\n        hash = ((hash &lt;&lt; 5) + hash) + c;\n    }\n    \n    return hash;\n}\n\n\/*\n * Fonction de hachage alternative type sdbm\n *\/\nunsigned long int hash_sdbm(const char *str)\n{\n    unsigned long int hash = 0;\n    int c;\n    \n    if (str == NULL)\n    {\n        return 0;\n    }\n    \n    while ((c = *str++) != '\\0')\n    {\n        hash = c + (hash &lt;&lt; 6) + (hash &lt;&lt; 16) - hash;\n    }\n    \n    return hash;\n}\n\n\/*\n * Fonction de hachage tr\u00e8s simple pour d\u00e9butants\n * (plus facile \u00e0 comprendre)\n *\/\nunsigned long int hash_simple(const char *str)\n{\n    unsigned long int hash = 0;\n    const unsigned long int prime = 31;\n    const char *p;\n    \n    if (str == NULL)\n    {\n        return 0;\n    }\n    \n    p = str;\n    while (*p != '\\0')\n    {\n        hash = (hash * prime) + (unsigned long int)(*p);\n        p++;\n    }\n    \n    return hash;\n}\n\n\/*\n * Convertit un hash en cha\u00eene hexad\u00e9cimale\n * Le buffer doit avoir au moins 17 octets (16 hex + null)\n *\/\nvoid hash_to_hex(unsigned long int hash, char *hex_buffer, size_t buf_size)\n{\n    \/* \n     * ANSI C n'a pas de snprintf, on utilise sprintf avec v\u00e9rification\n     * On suppose que buf_size >= 17 pour un long int (8 octets = 16 hex)\n     *\/\n    if (buf_size >= 17)\n    {\n        (void)sprintf(hex_buffer, \"%08lX\", hash);\n    }\n    else if (buf_size > 0)\n    {\n        hex_buffer[0] = '\\0'; \/* Buffer trop petit *\/\n    }\n}\n\n\/*\n * Affiche l'utilisation du programme\n *\/\nstatic void print_usage(const char *prog_name)\n{\n    fprintf(stderr, \"Usage: %s [options] \\\"chaine a hasher\\\"\\n\", prog_name);\n    fprintf(stderr, \"Options:\\n\");\n    fprintf(stderr, \"  -s    Utiliser l'algorithme simple (defaut)\\n\");\n    fprintf(stderr, \"  -d    Utiliser l'algorithme djb2\\n\");\n    fprintf(stderr, \"  -m    Utiliser l'algorithme sdbm\\n\");\n    fprintf(stderr, \"  -a    Afficher tous les algorithmes\\n\");\n    fprintf(stderr, \"  -h    Afficher cette aide\\n\");\n}\n\n\/*\n * Programme principal\n *\/\nint main(int argc, char *argv[])\n{\n    const char *input_string = NULL;\n    int algorithm = 0; \/* 0=simple, 1=djb2, 2=sdbm *\/\n    int show_all = 0;\n    int i;\n    \n    \/* Analyse des arguments *\/\n    for (i = 1; i &lt; argc; i++)\n    {\n        if (argv[i][0] == '-')\n        {\n            switch (argv[i][1])\n            {\n                case 's':\n                    algorithm = 0;\n                    break;\n                case 'd':\n                    algorithm = 1;\n                    break;\n                case 'm':\n                    algorithm = 2;\n                    break;\n                case 'a':\n                    show_all = 1;\n                    break;\n                case 'h':\n                    print_usage(argv[0]);\n                    return 0;\n                default:\n                    fprintf(stderr, \"Option inconnue: %s\\n\", argv[i]);\n                    print_usage(argv[0]);\n                    return 1;\n            }\n        }\n        else\n        {\n            input_string = argv[i];\n        }\n    }\n    \n    \/* Si aucune cha\u00eene fournie, on utilise un exemple *\/\n    if (input_string == NULL)\n    {\n        fprintf(stderr, \"Aucune chaine fournie.\\n\");\n        print_usage(argv[0]);\n        \n        printf(\"\\nExemple d'utilisation:\\n\");\n        input_string = \"Hello, World!\";\n        printf(\"Chaine par defaut: \\\"%s\\\"\\n\\n\", input_string);\n    }\n    \n    \/* Calcul et affichage des hashs *\/\n    if (show_all)\n    {\n        unsigned long int hash1, hash2, hash3;\n        char hex_buffer[17]; \/* 16 caract\u00e8res hexa + null terminator *\/\n        \n        hash1 = hash_simple(input_string);\n        hash2 = hash_djb2(input_string);\n        hash3 = hash_sdbm(input_string);\n        \n        printf(\"Resultats pour: \\\"%s\\\"\\n\", input_string);\n        printf(\"Longueur: %lu caracteres\\n\", \n               (unsigned long)strlen(input_string));\n        printf(\"\\n\");\n        \n        printf(\"Algorithme        Hash (decimal)      Hash (hex)\\n\");\n        printf(\"-------------     ---------------     ----------\\n\");\n        \n        hash_to_hex(hash1, hex_buffer, sizeof(hex_buffer));\n        printf(\"Simple            %-19lu 0x%s\\n\", hash1, hex_buffer);\n        \n        hash_to_hex(hash2, hex_buffer, sizeof(hex_buffer));\n        printf(\"DJB2              %-19lu 0x%s\\n\", hash2, hex_buffer);\n        \n        hash_to_hex(hash3, hex_buffer, sizeof(hex_buffer));\n        printf(\"SDBM              %-19lu 0x%s\\n\", hash3, hex_buffer);\n    }\n    else\n    {\n        unsigned long int hash;\n        char hex_buffer[17];\n        const char *algo_name;\n        \n        switch (algorithm)\n        {\n            case 0:\n                hash = hash_simple(input_string);\n                algo_name = \"simple\";\n                break;\n            case 1:\n                hash = hash_djb2(input_string);\n                algo_name = \"djb2\";\n                break;\n            case 2:\n                hash = hash_sdbm(input_string);\n                algo_name = \"sdbm\";\n                break;\n            default:\n                hash = hash_simple(input_string);\n                algo_name = \"simple\";\n                break;\n        }\n        \n        hash_to_hex(hash, hex_buffer, sizeof(hex_buffer));\n        \n        printf(\"Algorithme: %s\\n\", algo_name);\n        printf(\"Chaine: \\\"%s\\\"\\n\", input_string);\n        printf(\"Hash (decimal): %lu\\n\", hash);\n        printf(\"Hash (hexadecimal): 0x%s\\n\", hex_buffer);\n        printf(\"Taille du hash: %lu bits\\n\", \n               (unsigned long)sizeof(hash) * 8);\n    }\n    \n    return EXIT_SUCCESS;\n}\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Dans notre programme nous proposons 3 type d\u2019algorithmes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">hash_simple<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">avec monia donner l&rsquo;organigramme de cet algorithme et PL<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">djb2<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">avec monia donner l&rsquo;organigramme de cet algorithme et PL<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">sdbm<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">avec monia donner l&rsquo;organigramme de cet algorithme et PL<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pr\u00e9sentation du hash: Un hash, c&rsquo;est une empreinte digitale num\u00e9rique unique et de taille fixe cr\u00e9\u00e9e \u00e0 partir de n&rsquo;importe quelle donn\u00e9e, qui permet de l&rsquo;identifier et de v\u00e9rifier qu&rsquo;elle [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-5783","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>hash en c - workboot<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/workboot.fr\/ciela\/hash-en-c\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"hash en c - workboot\" \/>\n<meta property=\"og:description\" content=\"Pr\u00e9sentation du hash: Un hash, c&rsquo;est une empreinte digitale num\u00e9rique unique et de taille fixe cr\u00e9\u00e9e \u00e0 partir de n&rsquo;importe quelle donn\u00e9e, qui permet de l&rsquo;identifier et de v\u00e9rifier qu&rsquo;elle [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/workboot.fr\/ciela\/hash-en-c\/\" \/>\n<meta property=\"og:site_name\" content=\"workboot\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-13T17:45:04+00:00\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/hash-en-c\\\/\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/hash-en-c\\\/\",\"name\":\"hash en c - workboot\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#website\"},\"datePublished\":\"2025-12-13T14:18:18+00:00\",\"dateModified\":\"2025-12-13T17:45:04+00:00\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/workboot.fr\\\/ciela\\\/hash-en-c\\\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#website\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/\",\"name\":\"workboot\",\"description\":\"Open Source, Open Minds \",\"publisher\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#organization\",\"name\":\"workboot\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo_ciel-dorian-1.png\",\"contentUrl\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo_ciel-dorian-1.png\",\"width\":1024,\"height\":950,\"caption\":\"workboot\"},\"image\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"hash en c - workboot","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/workboot.fr\/ciela\/hash-en-c\/","og_locale":"fr_FR","og_type":"article","og_title":"hash en c - workboot","og_description":"Pr\u00e9sentation du hash: Un hash, c&rsquo;est une empreinte digitale num\u00e9rique unique et de taille fixe cr\u00e9\u00e9e \u00e0 partir de n&rsquo;importe quelle donn\u00e9e, qui permet de l&rsquo;identifier et de v\u00e9rifier qu&rsquo;elle [&hellip;]","og_url":"https:\/\/workboot.fr\/ciela\/hash-en-c\/","og_site_name":"workboot","article_modified_time":"2025-12-13T17:45:04+00:00","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/workboot.fr\/ciela\/hash-en-c\/","url":"https:\/\/workboot.fr\/ciela\/hash-en-c\/","name":"hash en c - workboot","isPartOf":{"@id":"https:\/\/workboot.fr\/ciela\/#website"},"datePublished":"2025-12-13T14:18:18+00:00","dateModified":"2025-12-13T17:45:04+00:00","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/workboot.fr\/ciela\/hash-en-c\/"]}]},{"@type":"WebSite","@id":"https:\/\/workboot.fr\/ciela\/#website","url":"https:\/\/workboot.fr\/ciela\/","name":"workboot","description":"Open Source, Open Minds ","publisher":{"@id":"https:\/\/workboot.fr\/ciela\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/workboot.fr\/ciela\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/workboot.fr\/ciela\/#organization","name":"workboot","url":"https:\/\/workboot.fr\/ciela\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/workboot.fr\/ciela\/#\/schema\/logo\/image\/","url":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/05\/logo_ciel-dorian-1.png","contentUrl":"https:\/\/workboot.fr\/ciela\/wp-content\/uploads\/2025\/05\/logo_ciel-dorian-1.png","width":1024,"height":950,"caption":"workboot"},"image":{"@id":"https:\/\/workboot.fr\/ciela\/#\/schema\/logo\/image\/"}}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"admin","author_link":"https:\/\/workboot.fr\/ciela\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"Pr\u00e9sentation du hash: Un hash, c&rsquo;est une empreinte digitale num\u00e9rique unique et de taille fixe cr\u00e9\u00e9e \u00e0 partir de n&rsquo;importe quelle donn\u00e9e, qui permet de l&rsquo;identifier et de v\u00e9rifier qu&rsquo;elle [&hellip;]","_links":{"self":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/5783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/comments?post=5783"}],"version-history":[{"count":8,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/5783\/revisions"}],"predecessor-version":[{"id":5825,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/5783\/revisions\/5825"}],"wp:attachment":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/media?parent=5783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}