RSA 原理说明

原理

密 文 = 明 文 E m o d    N 密文=明文^E\mod N EmodN
明 文 = 密 文 D m o d    N 明文=密文^D\mod N DmodN

公钥 (E, N)
私钥 (D, N)

名称 说明
N N = p ∗ q , 且 p 与 q 互 质 N=p*q,且p与q互质 N=pq,pq
L p − 1 与 q − 1 的 最 小 公 倍 数 p-1 与 q-1 的最小公倍数 p1q1
E E < L , 并 与 L 互 质 E<L, 并与L互质 E<L,L
D D < L , ( E * D ) m o d    L = 1 D < L,(E*D) \mod L = 1 D<L(ED)modL1

代码

#include 
// a ^ b % p 
int rsa(int a, int b, int N)
{
    int r=1;
    while(b)
    {
        if(b&1) r=r*a%N;
        a=a*a%N;
        b=b>>1;
    }
    return r;
}

int getD(int E, int N)
{
    int p, L, D;
    for(p=2; p<N; p++)
    {
        if(N%p==0) 
        {
            L = (p-1)*(N/p-1);
            for(D=2; D<L; D++)
            {
                if(D*E%L==1) return D;
            }           
        }
    }
    return 0;
}

int main()
{
    int D = 67;  // 私钥 (143, 67)
    int E = 43;  // 公钥 (143, 43)
    int N = 143;
    int in = 126; // 明文
    printf("密文:%d \n", rsa(in, E, N)); 
    printf("明文:%d \n", rsa(rsa(in, E, N), D, N)); 
    printf("解密:%d \n", getD(E, N));
    return 0;
}

你可能感兴趣的:(加密)