MS CAPI PRIVATEKEYBLOB 到 RSA*

发布于 2024-11-24 04:02:03 字数 899 浏览 1 评论 0原文

不一致

我实现了这个并收到错误:0407B07B:rsa例程:RSA_check_key:de与1 BitLen 1024,ModLen 128,Prime1,Prime2,Exponent1,Exponent2,系数长度= 64 PrivateExponent Len = 128

RSA* blobtorsa()
{
    BN_set_word(rsa->e, prsahdr->pubexp);
    lend_tobn(rsa->n, pbmod, cbmod);
    lend_tobn(rsa->p, pbprime1, cbprimes);
    lend_tobn(rsa->q, pbprime2, cbprimes);
    lend_tobn(rsa->d, pbprivexp, cbprivexp);
    // d mod ( p - 1 )
    BN_mod_sub(rsa->dmp1, rsa->d, BN_value_one(), rsa->p, ctx);
    // d mod (q-1)
    BN_mod_sub(rsa->dmq1, rsa->d, BN_value_one(), rsa->q, ctx);
    BIGNUM* negone = BN_new();
    BN_set_word(negone, -1);
    // q^-1 mod p
    BN_mod_exp(rsa->iqmp, rsa->q, negone, rsa->p, ctx);
    if ( RSA_check_key(rsa) == 0 )
    {
      print error
      error:0407B07B:rsa routines:RSA_check_key:d e not congruent to 1
    }
}

I implemented this and am getting error:0407B07B:rsa routines:RSA_check_key:d e not congruent to 1

BitLen 1024, ModLen 128, Prime1,Prime2,Exponent1,Exponent2,Coefficient lengths =64
PrivateExponent Len = 128

RSA* blobtorsa()
{
    BN_set_word(rsa->e, prsahdr->pubexp);
    lend_tobn(rsa->n, pbmod, cbmod);
    lend_tobn(rsa->p, pbprime1, cbprimes);
    lend_tobn(rsa->q, pbprime2, cbprimes);
    lend_tobn(rsa->d, pbprivexp, cbprivexp);
    // d mod ( p - 1 )
    BN_mod_sub(rsa->dmp1, rsa->d, BN_value_one(), rsa->p, ctx);
    // d mod (q-1)
    BN_mod_sub(rsa->dmq1, rsa->d, BN_value_one(), rsa->q, ctx);
    BIGNUM* negone = BN_new();
    BN_set_word(negone, -1);
    // q^-1 mod p
    BN_mod_exp(rsa->iqmp, rsa->q, negone, rsa->p, ctx);
    if ( RSA_check_key(rsa) == 0 )
    {
      print error
      error:0407B07B:rsa routines:RSA_check_key:d e not congruent to 1
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怎会甘心 2024-12-01 04:02:05

对于其他想知道的人 - 一旦你获得了单独的指针和大小
结构中的项目:

{
    BIGNUM* temp = BN_new();

    rsa->e = BN_new();
    BN_set_word(rsa->e, prsapk->pubexp);

    // set n, p, q and d from structures
    rsa->n = BN_new();
    lend_tobn(rsa->n, pbMod, cbMod);
    rsa->p = BN_new();
    lend_tobn(rsa->p, pbPrime1, cbPrime1);
    rsa->q = BN_new();
    lend_tobn(rsa->q, pbPrime2, cbPrime2);
    rsa->d = BN_new();
    lend_tobn(rsa->d, pbPrivateExponent, cbPrivateExponent);

    // calculate the remainder of properties

    // d mod (p-1)
    rsa->dmp1 = BN_new();
    BN_copy(temp, rsa->p);
    BN_sub_word(temp, 1);
    BN_mod(rsa->dmp1, rsa->d, temp, ctx);

    // d mod (q-1)
    rsa->dmq1 = BN_new();
    BN_copy(temp, rsa->q);
    BN_sub_word(temp, 1);
    BN_mod(rsa->dmq1, rsa->d, temp, ctx);

    // q^-1 mod p
    rsa->iqmp = BN_new();
    BN_mod_inverse(rsa->iqmp, rsa->q, rsa->p, ctx);

    BN_free(temp);

    BN_CTX_end(ctx);
    BN_CTX_free(ctx);

    ERR_clear_error();
    if ( RSA_check_key(rsa) == 1 )
            {
            }

}

For anyone else wondering - once you get the pointers and size to the separate
items in the structure:

{
    BIGNUM* temp = BN_new();

    rsa->e = BN_new();
    BN_set_word(rsa->e, prsapk->pubexp);

    // set n, p, q and d from structures
    rsa->n = BN_new();
    lend_tobn(rsa->n, pbMod, cbMod);
    rsa->p = BN_new();
    lend_tobn(rsa->p, pbPrime1, cbPrime1);
    rsa->q = BN_new();
    lend_tobn(rsa->q, pbPrime2, cbPrime2);
    rsa->d = BN_new();
    lend_tobn(rsa->d, pbPrivateExponent, cbPrivateExponent);

    // calculate the remainder of properties

    // d mod (p-1)
    rsa->dmp1 = BN_new();
    BN_copy(temp, rsa->p);
    BN_sub_word(temp, 1);
    BN_mod(rsa->dmp1, rsa->d, temp, ctx);

    // d mod (q-1)
    rsa->dmq1 = BN_new();
    BN_copy(temp, rsa->q);
    BN_sub_word(temp, 1);
    BN_mod(rsa->dmq1, rsa->d, temp, ctx);

    // q^-1 mod p
    rsa->iqmp = BN_new();
    BN_mod_inverse(rsa->iqmp, rsa->q, rsa->p, ctx);

    BN_free(temp);

    BN_CTX_end(ctx);
    BN_CTX_free(ctx);

    ERR_clear_error();
    if ( RSA_check_key(rsa) == 1 )
            {
            }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文