-1
#include <string.h>
#include <conio.h>
#include <math.h>

int mult(unsigned int x, unsigned int y, unsigned int n) {
    unsigned long int k = 1;
    int j;
    for (j = 1; j <= y; j++)
        k = (k * x) % n;
    return (unsigned int) k;
}

void main() {
    char msg[100];
    unsigned int pt[100], ct[100], n, d, e, p, q, i;
    printf("Enter message : ");
    gets(msg);
    //strcpy(pt, msg);
    for (i = 0; i < strlen(msg); i++)
        pt[i] = msg[i];
    n = 253;
    d = 17;
    e = 13;
    printf("\nCT = ");
    for (i = 0; i < strlen(msg); i++)
        ct[i] = mult(pt[i], e, n);
    for (i = 0; i < strlen(msg); i++)
        printf("%d ", ct[i]);
    printf("\nPT = ");
    for (i = 0; i < strlen(msg); i++)
        printf("%c", pt[i]);
    for (i = 0; i < strlen(msg); i++)
        pt[i] = mult(ct[i], d, n);
}

これはRSAアルゴリズムを実装するための単純なプログラムであり、ここで何が起こっているのか、特にn = 253、d = 17、e=13である理由を誰でも説明できます。

助けていただければ幸いです。

4

1 に答える 1

1

http://en.wikipedia.org/wiki/RSA_(algorithm)。

253 = 11 * 23、// n = 253は2つの「大きな」素数p、qの積です

phi(n)= 10 * 22=220。//オイラーのトーティエント関数はp、q
e = 13 //少数、つまりphi(n)と互いに素であるから計算されます。次に、dは、e * d = 1 mod 220-> d = 17-
> d * e = 221 === 1mod220となるように計算されます。

p、qを捨てます。

于 2012-11-18T07:26:25.667 に答える