简单运用RSA加密算法 求密钥对

//    RSA加密算法

//    p=3,q=11;选取两个大素数

//    n=p*q=33;取其乘积

//    o=(p-1)(q-1)=20;然后取一个数e,要求满足e并且eo互素

//    选择e:gcd(e,o)=1;这里选择e=7; e即为加密密钥

//    d*e % 20 = 1 ,d<20,7*3=1*20+1;可得到d=3; d即为解密密钥

//    公钥KU=733}私钥KR333

    

//    设消息为数M (M

//    x=(M^d)%n就得到了加密后的消息x

//    y=(x^e)%n y == M,从而完成对x的解密

    

//    n d两个数构成公钥,可以告诉别人;

//    n e两个数构成私钥,e自己保留,不让任何人知道。

//    给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。

//    别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。

    

//    rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解

//    从而在已知n d的情况下无法获得e;同样在已知n e的情况下,在目前也很难

//    求得d

void rsaKey()//求密钥对
{
    int prime1=0,prime2=0;
    printf("请输入两个素数:");
    while(scanf("%d%d",&prime1,&prime2))
    {
        if(prime(prime1)&&prime(prime1))
            break;
        else printf("请输入两个素数:");
    }
    
    int product = 0;//product的二进制表示时所占用的位数,就是所谓的密钥长度
    product = prime1 * prime2;//两个素数的积
    
    int o = (prime1 - 1) * (prime2 - 1);
    int e = 0,d = 0;
    printf("可以选择的密钥\ne: ");//输出可以选择的密钥
    for(e=1;e


测试:

请输入两个素数:7 11

可以选择的密钥

e: 1 7 11 13 17 19 23 29 31 37 41 43 47 49 53 59 

Choose KEY from up: 7

d = 43

Public Key{7,77}

PrimaryKey{43,77}



你可能感兴趣的:(C)