{"id":1322,"date":"2025-06-10T09:03:12","date_gmt":"2025-06-10T08:03:12","guid":{"rendered":"https:\/\/workboot.fr\/ciela\/?page_id=1322"},"modified":"2025-06-13T15:17:20","modified_gmt":"2025-06-13T14:17:20","slug":"chiffrement-rsa-en-c","status":"publish","type":"page","link":"https:\/\/workboot.fr\/ciela\/chiffrement-rsa-en-c\/","title":{"rendered":"Chiffrement RSA en C"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\ud83d\udd10 Param\u00e8tres RSA (exemple p\u00e9dagogique)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Initiales de<\/strong> : <strong>Rivest, Shamir et Adleman<\/strong>  les d\u00e9couvreurs de ce chiffrement<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supposons que nous avons :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>p = 17<\/code>, <code>q = 19<\/code> \u2192 deux petits nombres premiers, volontairement pour des raisons p\u00e9dagogique <\/li>\n\n\n\n<li><code>n = p \u00d7 q = 17 \u00d7 19 = 323<\/code><\/li>\n\n\n\n<li><code>\u03c6(n) = (p\u22121)(q\u22121) = 16 \u00d7 18 = 288<\/code><\/li>\n\n\n\n<li><code>e = 7<\/code> (choisi tel que <code>gcd(e, \u03c6) = 1<\/code>)<\/li>\n\n\n\n<li><code>d = 247<\/code> (car <code>7 \u00d7 247 \u2261 1 mod 288<\/code> \u2192 inverse modulaire de 7 mod 288)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2709\ufe0f Message \u00e0 chiffrer : <code>'A'<\/code><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Code ASCII de <code>'A'<\/code> = <code>65<\/code><\/li>\n\n\n\n<li>On veut chiffrer ce nombre avec la cl\u00e9 publique <code>(e = 7, n = 323)<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd12 Chiffrement<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Formule : C=Memod\u2009\u2009nC = M^e \\mod nC=Memodn C=657mod\u2009\u2009323C = 65^7 \\mod 323C=657mod323<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Faisons les puissances successives (modulo 323) :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>652=4225mod\u2009\u2009323=4225\u221213\u00d7323=4225\u22124199=2665^2 = 4225 \\mod 323 = 4225 &#8211; 13\u00d7323 = 4225 &#8211; 4199 = 26652=4225mod323=4225\u221213\u00d7323=4225\u22124199=26<\/li>\n\n\n\n<li>654=(652)2=262=676mod\u2009\u2009323=676\u22122\u00d7323=676\u2212646=3065^4 = (65^2)^2 = 26^2 = 676 \\mod 323 = 676 &#8211; 2\u00d7323 = 676 &#8211; 646 = 30654=(652)2=262=676mod323=676\u22122\u00d7323=676\u2212646=30<\/li>\n\n\n\n<li>657=65\u00d7652\u00d7654=65\u00d726\u00d73065^7 = 65 \u00d7 65^2 \u00d7 65^4 = 65 \u00d7 26 \u00d7 30657=65\u00d7652\u00d7654=65\u00d726\u00d730<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Calcul :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>26\u00d730=78026 \u00d7 30 = 78026\u00d730=780<\/li>\n\n\n\n<li>780\u00d765=50700780 \u00d7 65 = 50700780\u00d765=50700<\/li>\n\n\n\n<li>50700mod\u2009\u2009323=50700\u2212157\u00d7323=50700\u221250711=\u221211\u2261312mod\u2009\u200932350700 \\mod 323 = 50700 &#8211; 157\u00d7323 = 50700 &#8211; 50711 = -11 \u2261 312 \\mod 32350700mod323=50700\u2212157\u00d7323=50700\u221250711=\u221211\u2261312mod323<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd10 <strong>Message chiffr\u00e9 = 312<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd13 D\u00e9chiffrement<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Formule : M=Cdmod\u2009\u2009n=312247mod\u2009\u2009323M = C^d \\mod n = 312^{247} \\mod 323M=Cdmodn=312247mod323<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est long \u00e0 faire \u00e0 la main, mais en pratique on utiliserait l&rsquo;exponentiation rapide ou un programme. Si on le fait (ou v\u00e9rifie) \u00e0 la machine : 312247mod\u2009\u2009323=65312^{247} \\mod 323 = 65312247mod323=65<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714\ufe0f On retrouve bien le message original !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">chiffrement pourquoi ?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Pourquoi c\u2019est un chiffrement, concr\u00e8tement ?<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Transforme le message (texte clair) en un code incompr\u00e9hensible (texte chiffr\u00e9)<\/strong><br>Ici, on transforme le nombre <code>M = 65<\/code> en <code>C = 312<\/code>. Sans la cl\u00e9 priv\u00e9e, <code>312<\/code> ne veut rien dire.<\/li>\n\n\n\n<li><strong>Reversible seulement avec la cl\u00e9 priv\u00e9e<\/strong><br>Le d\u00e9chiffrement utilise la cl\u00e9 priv\u00e9e <code>d<\/code> pour inverser l\u2019op\u00e9ration et retrouver le message initial <code>M<\/code>.<\/li>\n\n\n\n<li><strong>Bas\u00e9 sur un probl\u00e8me math\u00e9matique difficile<\/strong><br>Le chiffrement RSA repose sur la difficult\u00e9 de factoriser <code>n<\/code> (ici 323) en ses facteurs premiers (<code>p<\/code> et <code>q<\/code>).\n<ul class=\"wp-block-list\">\n<li>Si tu ne connais pas <code>p<\/code> et <code>q<\/code>, il est extr\u00eamement compliqu\u00e9 (pour des grands nombres) de calculer <code>d<\/code> et donc de d\u00e9chiffrer.<\/li>\n\n\n\n<li>Sans <code>d<\/code>, tu ne peux pas r\u00e9cup\u00e9rer le message clair.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Fonction math\u00e9matique asym\u00e9trique<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Cl\u00e9 publique<\/strong> <code>e<\/code> permet de chiffrer.<\/li>\n\n\n\n<li><strong>Cl\u00e9 priv\u00e9e<\/strong> <code>d<\/code> permet de d\u00e9chiffrer.<br>Chiffrer avec <code>e<\/code> est facile, mais sans <code>d<\/code>, inverser la fonction est \u00ab facile \u00e0 faire dans un sens, difficile dans l\u2019autre \u00bb.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">En r\u00e9sum\u00e9 :<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tu passes du message clair (<code>M<\/code>) au message chiffr\u00e9 (<code>C<\/code>) gr\u00e2ce \u00e0 la cl\u00e9 publique.<\/li>\n\n\n\n<li>Seule la cl\u00e9 priv\u00e9e peut transformer <code>C<\/code> en <code>M<\/code>.<\/li>\n\n\n\n<li>Sans la cl\u00e9 priv\u00e9e, m\u00eame en connaissant <code>C<\/code> et la cl\u00e9 publique, tu ne peux pas retrouver <code>M<\/code> (au moins pour des grands nombres).<\/li>\n\n\n\n<li>Le message chiffr\u00e9 est un <strong>secret cod\u00e9<\/strong> que personne d\u2019autre ne peut lire.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Th\u00e9orie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On va volontairement travailler sur 16 bits pour comprendre le principe! <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Concepts RSA simplifi\u00e9s :<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Choisir deux petits nombres premiers <code>p<\/code> et <code>q<\/code>.<\/li>\n\n\n\n<li>Calculer <code>n = p * q<\/code>.<\/li>\n\n\n\n<li>Calculer <code>\u03c6(n) = (p-1) * (q-1)<\/code>.<\/li>\n\n\n\n<li>Choisir un exposant <code>e<\/code> tel que <code>1 &lt; e &lt; \u03c6(n)<\/code> et <code>e<\/code> est premier avec <code>\u03c6(n)<\/code>.<\/li>\n\n\n\n<li>Calculer <code>d<\/code>, l&rsquo;inverse modulaire de <code>e<\/code> modulo <code>\u03c6(n)<\/code>.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cl\u00e9 publique<\/strong> : <code>(e, n)<\/code><\/li>\n\n\n\n<li><strong>Cl\u00e9 priv\u00e9e<\/strong> : <code>(d, n)<\/code><\/li>\n\n\n\n<li><strong>Chiffrement<\/strong> : <code>c = m^e mod n<\/code><\/li>\n\n\n\n<li><strong>D\u00e9chiffrement<\/strong> : <code>m = c^d mod n<\/code><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Cl\u00e9 priv\u00e9e \/ public  16 bits <\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ genrsa16.c : G\u00e9n\u00e8re une paire de cl\u00e9s RSA 16 bits\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;time.h&gt;\n#include &lt;stdbool.h&gt;\n#include &lt;math.h&gt;\n\nbool est_premier(int n) {\n    if (n &lt; 2) return false;\n    if (n % 2 == 0) return n == 2;\n    for (int i = 3; i &lt;= sqrt(n); i += 2)\n        if (n % i == 0) return false;\n    return true;\n}\n\nint pgcd(int a, int b) {\n    while (b != 0) {\n        int tmp = b;\n        b = a % b;\n        a = tmp;\n    }\n    return a;\n}\n\n\/\/ Inverse modulaire : retourne d tel que (d * e) % phi == 1\nint mod_inverse(int e, int phi) {\n    int t = 0, newt = 1;\n    int r = phi, newr = e;\n    while (newr != 0) {\n        int quotient = r \/ newr;\n        int tmp = newt;\n        newt = t - quotient * newt;\n        t = tmp;\n\n        tmp = newr;\n        newr = r - quotient * newr;\n        r = tmp;\n    }\n    if (r &gt; 1) return -1; \/\/ Pas d'inverse\n    if (t &lt; 0) t += phi;\n    return t;\n}\n\nint main() {\n    srand(time(NULL));\n    int p, q;\n    do {\n        p = rand() % 256;\n    } while (!est_premier(p));\n    do {\n        q = rand() % 256;\n    } while (!est_premier(q) || q == p);\n\n    int n = p * q;\n    int phi = (p - 1) * (q - 1);\n\n    int e;\n    do {\n        e = rand() % phi;\n    } while (pgcd(e, phi) != 1 || e &lt;= 1);\n\n    int d = mod_inverse(e, phi);\n\n    printf(\"Cl\u00e9 publique (e, n) : (%d, %d)\\n\", e, n);\n    printf(\"Cl\u00e9 priv\u00e9e  (d, n) : (%d, %d)\\n\", d, n);\n    printf(\"p = %d, q = %d, \u03c6(n) = %d\\n\", p, q, phi);\n\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>bruno@debian:~\/Works\/langageC\/rsa16$ .\/genrsa16 \nCl\u00e9 publique (e, n) : (6107, 10823)\nCl\u00e9 priv\u00e9e  (d, n) : (5555, 10823)\np = 79, q = 137, \u03c6(n) = 10608<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>p = 79<\/strong>, <strong>q = 137<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>n = 79 \u00d7 137 = 10823<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u03c6(n) = (p-1)\u00d7(q-1) = 78 \u00d7 136 = 10608<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cl\u00e9 publique : <strong>(e = 6107, n = 10823)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cl\u00e9 priv\u00e9e : <strong>(d = 5555, n = 10823)<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Concepts Math\u00e9matiques utilis\u00e9s<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">modulo (mod)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">on a besoin de mod ,  qui est simplement le reste .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">17\/5= 3 et il reste 2 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">donc 17 mod 5 = 2<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La congruence<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">on a besoin de la congruence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ce symbole \u2261  \u00ab\u00a0congruent\u00a0\u00bb<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a\u2261b mod n<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Terme<\/th><th>Signification<\/th><\/tr><\/thead><tbody><tr><td>a \u2261 b mod\u2009\u2009n<\/td><td>a et b laissent le m\u00eame reste modulo n<\/td><\/tr><tr><td>M\u00eame reste<\/td><td>\u21d2 congruence<\/td><\/tr><tr><td>Base des maths modulaires<\/td><td>cryptographie, informatique<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple de code C pour savoir si  a et congru a b modulo n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">congrus.c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n\n\/\/ Fonction qui teste si a \u2261 b mod n\nint est_congru(int a, int b, int n) {\n    return ((a - b) % n == 0);\n}\n\nint main() {\n    int a, b, n;\n\n    printf(\"Entrez a : \");\n    scanf(\"%d\", &amp;a);\n\n    printf(\"Entrez b : \");\n    scanf(\"%d\", &amp;b);\n\n    printf(\"Entrez le modulo n : \");\n    scanf(\"%d\", &amp;n);\n\n    if (est_congru(a, b, n)) {\n        printf(\"%d et %d sont congrus modulo %d : %d \u2261 %d mod %d\\n\", a, b, n, a, b, n);\n    } else {\n        printf(\"%d et %d ne sont pas congrus modulo %d\\n\", a, b, n);\n    }\n\n    return EXIT_SUCCESS;\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>bruno@debian:~\/Works\/langageC\/congruent$ .\/congrus \nEntrez a : 17\nEntrez b : 2\nEntrez le modulo n : 5\n17 et 2 sont congrus modulo 5 : 17 \u2261 2 mod 5<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">G\u00e9n\u00e9ration :<br>p, q \u2192 choisis al\u00e9atoirement (premiers)<br>n = p \u00d7 q<br>\u03c6(n) = (p &#8211; 1) \u00d7 (q &#8211; 1) , la fonction d&rsquo;euler<br>e = exposant public, tel que gcd(e, \u03c6(n)) = 1<br>d = inverse modulaire de e mod \u03c6(n)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cl\u00e9s :<br>Publique = (e, n)<br>Priv\u00e9e = (d, n)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">exemple:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">p = 17  et q = 11<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">n = p \u00d7 q = 17 \u00d7 11 = 187<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03c6(n) = (p &#8211; 1) \u00d7 (q &#8211; 1) = 16 \u00d7 10 = 160<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Choix de <code>e<\/code> (exposant public)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On veut <code>1 &lt; e &lt; \u03c6(n)<\/code> et <code>gcd(e, \u03c6(n)) = 1<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prenons par exemple <code>e = 7<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714 V\u00e9rification :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">gcd(7, 160) = 1 \u2192 OK<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Calcul de <code>d<\/code> (exposant priv\u00e9)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On cherche <code>d<\/code> tel que :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>d \u00d7 e \u2261 1 mod 160\nd \u00d7 7 \u2261 1 mod 160<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On r\u00e9sout cette \u00e9quation avec l\u2019<strong>inverse modulaire<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83e\uddee R\u00e9sultat (via l\u2019algorithme d\u2019Euclide \u00e9tendu) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>d = 23 (car 23 \u00d7 7 = 161 \u2261 1 mod 160)<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 R\u00e9sum\u00e9 des cl\u00e9s<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Cl\u00e9<\/th><th>Valeur<\/th><\/tr><\/thead><tbody><tr><td>Publique<\/td><td><code>(e = 7, n = 187)<\/code><\/td><\/tr><tr><td>Priv\u00e9e<\/td><td><code>(d = 23, n = 187)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple avec Alice et Bob<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Imaginons que Bob veut envoyer le <strong>nombre 88<\/strong> \u00e0 Alice.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Chiffrement (Bob utilise la cl\u00e9 publique <code>(7, 187)<\/code>)<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">luaCopierModifier<\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>c = m^e mod n\n  = 88^7 mod 187<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>88^7 = 33232930569601\n33232930569601 mod 187 = 11<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd12 Message chiffr\u00e9 : <code>c = <mark style=\"background-color:rgba(0, 0, 0, 0);color:#cf2e2e\" class=\"has-inline-color\">11<\/mark><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd13 D\u00e9chiffrement (Alice utilise sa cl\u00e9 priv\u00e9e <code>(23, 187)<\/code>)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>m = c^d mod n = 11^23 mod 187<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>11^23 mod 187 = 88<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705 Message d\u2019origine retrouv\u00e9 : <code>m = 88<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udccc Conclusion<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>p = 17<\/code>, <code>q = 11<\/code><\/li>\n\n\n\n<li><code>n = 187<\/code>, <code>\u03c6(n) = 160<\/code><\/li>\n\n\n\n<li><code>e = 7<\/code>, <code>d = 23<\/code><\/li>\n\n\n\n<li>Message original : <code>88<\/code><\/li>\n\n\n\n<li>Message chiffr\u00e9 : <code>11<\/code><\/li>\n\n\n\n<li>Message d\u00e9chiffr\u00e9 : <code>88<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">rsa_demo.c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;stdint.h&gt;\n#include &lt;math.h&gt;\n\n\/\/ Fonction d'exponentiation modulaire rapide : (base^exp) % mod\nlong long modexp(long long base, long long exp, long long mod) {\n    long long result = 1;\n    base %= mod;\n    while (exp &gt; 0) {\n        if (exp % 2 == 1)  \/\/ exp impair\n            result = (result * base) % mod;\n        base = (base * base) % mod;\n        exp \/= 2;\n    }\n    return result;\n}\n\nint main(void) {\n    \/\/ Cl\u00e9s RSA fixes pour d\u00e9monstration\n    long long p = 17;\n    long long q = 11;\n    long long n = p * q;               \/\/ n = 187\n    long long phi = (p - 1) * (q - 1); \/\/ phi = 160\n    long long e = 7;                   \/\/ cl\u00e9 publique\n    long long d = 23;                  \/\/ cl\u00e9 priv\u00e9e\n\n    printf(\"Cl\u00e9 publique  (e = %lld, n = %lld)\\n\", e, n);\n    printf(\"Cl\u00e9 priv\u00e9e    (d = %lld, n = %lld)\\n\\n\", d, n);\n\n    \/\/ Message clair \u00e0 chiffrer\n    long long message;\n    printf(\"Entrez un message (entier &lt; %lld) \u00e0 chiffrer : \", n);\n    if (scanf(\"%lld\", &amp;message) != 1 || message &lt;= 0 || message &gt;= n) {\n        fprintf(stderr, \"Entr\u00e9e invalide. Le message doit \u00eatre un entier entre 1 et %lld.\\n\", n - 1);\n        return EXIT_FAILURE;\n    }\n\n    \/\/ Chiffrement\n    long long chiffre = modexp(message, e, n);\n    printf(\"\\nMessage chiffr\u00e9 : %lld\\n\", chiffre);\n\n    \/\/ D\u00e9chiffrement\n    long long dechiffre = modexp(chiffre, d, n);\n    printf(\"Message d\u00e9chiffr\u00e9 : %lld\\n\", dechiffre);\n\n    return EXIT_SUCCESS;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Entrez un message (entier &lt; 187) \u00e0 chiffrer : 88<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Message chiffr\u00e9 : 11<br>Message d\u00e9chiffr\u00e9 : 88<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udd10 Param\u00e8tres RSA (exemple p\u00e9dagogique) Initiales de : Rivest, Shamir et Adleman les d\u00e9couvreurs de ce chiffrement Supposons que nous avons : \u2709\ufe0f Message \u00e0 chiffrer : &lsquo;A&rsquo; \ud83d\udd12 Chiffrement [&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-1322","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>Chiffrement RSA 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\/chiffrement-rsa-en-c\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chiffrement RSA en C - workboot\" \/>\n<meta property=\"og:description\" content=\"\ud83d\udd10 Param\u00e8tres RSA (exemple p\u00e9dagogique) Initiales de : Rivest, Shamir et Adleman les d\u00e9couvreurs de ce chiffrement Supposons que nous avons : \u2709\ufe0f Message \u00e0 chiffrer : &#039;A&#039; \ud83d\udd12 Chiffrement [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/workboot.fr\/ciela\/chiffrement-rsa-en-c\/\" \/>\n<meta property=\"og:site_name\" content=\"workboot\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-13T14:17:20+00:00\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/chiffrement-rsa-en-c\\\/\",\"url\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/chiffrement-rsa-en-c\\\/\",\"name\":\"Chiffrement RSA en C - workboot\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/workboot.fr\\\/ciela\\\/#website\"},\"datePublished\":\"2025-06-10T08:03:12+00:00\",\"dateModified\":\"2025-06-13T14:17:20+00:00\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/workboot.fr\\\/ciela\\\/chiffrement-rsa-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":"Chiffrement RSA 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\/chiffrement-rsa-en-c\/","og_locale":"fr_FR","og_type":"article","og_title":"Chiffrement RSA en C - workboot","og_description":"\ud83d\udd10 Param\u00e8tres RSA (exemple p\u00e9dagogique) Initiales de : Rivest, Shamir et Adleman les d\u00e9couvreurs de ce chiffrement Supposons que nous avons : \u2709\ufe0f Message \u00e0 chiffrer : 'A' \ud83d\udd12 Chiffrement [&hellip;]","og_url":"https:\/\/workboot.fr\/ciela\/chiffrement-rsa-en-c\/","og_site_name":"workboot","article_modified_time":"2025-06-13T14:17:20+00:00","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/workboot.fr\/ciela\/chiffrement-rsa-en-c\/","url":"https:\/\/workboot.fr\/ciela\/chiffrement-rsa-en-c\/","name":"Chiffrement RSA en C - workboot","isPartOf":{"@id":"https:\/\/workboot.fr\/ciela\/#website"},"datePublished":"2025-06-10T08:03:12+00:00","dateModified":"2025-06-13T14:17:20+00:00","inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/workboot.fr\/ciela\/chiffrement-rsa-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":"\ud83d\udd10 Param\u00e8tres RSA (exemple p\u00e9dagogique) Initiales de : Rivest, Shamir et Adleman les d\u00e9couvreurs de ce chiffrement Supposons que nous avons : \u2709\ufe0f Message \u00e0 chiffrer : 'A' \ud83d\udd12 Chiffrement [&hellip;]","_links":{"self":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/1322","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=1322"}],"version-history":[{"count":15,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/1322\/revisions"}],"predecessor-version":[{"id":1395,"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/pages\/1322\/revisions\/1395"}],"wp:attachment":[{"href":"https:\/\/workboot.fr\/ciela\/wp-json\/wp\/v2\/media?parent=1322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}