RSA模重复平方法

RSA模重复平方法的理解

因课设学习在RSA中使用模重复平方算法进行加快RSA加密解密,因此写这篇博客阐述自己对模重复平方法的理解:

模重复平方法

模重复平方法是一种常用于RSA算法的计算方法,在信息安全数学中有所设计,分为迭代法与非迭代法两种实现方式。 迭代法的时间复杂度为o(n^2),非迭代法的时间复杂度为o(n)

因为考虑到对于大数运算的实现难度与时间复杂度,此处只实现非迭代法。

模重复平方算法实现代码

void mod_exp(mpz_t result, const mpz_t exponent, const mpz_t base, const mpz_t n)
{
    char exp[2048 + 10];
    mpz_get_str(exp, 2, exponent); //把指数e转化为二进制并储存到字符数组exp中  

    mpz_t x, power;
    mpz_init(power);
    mpz_init_set_ui(x, 1);  // x = 1  
    mpz_mod(power, base, n); //power = base mod n  

    for (int i = strlen(exp) - 1; i > -1; i--)
    {
        if (exp[i] == '1')
        {
            mpz_mul(x, x, power);
            mpz_mod(x, x, n);   //x = x * power mod n  
        }
        mpz_mul(power, power, power);
        mpz_mod(power, power, n);  //power = power^2 mod n  
    }
    mpz_set(result, x); //返回结果  
}

模重复平方法之所以能加快RSA的速度,是因为减少了模运算的位数,对于大数而言,增强了运算的效率。
附上我自己写的利用模重复平方法的RSA加密模式,此处调用了gmp大数库。相关gmp大数库的函数不再介绍,可以自行了解。

char *mod_Encryption(const char * plain_text, const char * key_n, int key_e)/*处理明文加密*/
{
    mpz_t M, res, n, e;
    mpz_init_set_str(M, plain_text, BASE);
    mpz_init_set_str(n, key_n, BASE);
    mpz_init_set_ui(res, 0);
    mpz_init_set_ui(e, key_e);

    mod_exp(res, e, M, n);    //使用GMP中模幂计算函数

    char * result = new char[KEY_LENGTH + 10];
    mpz_get_str(result, BASE, res);

    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值