RSA得到了m e q p如何生成私钥

时间:2022-08-27 21:42:06
得到m e已经可以生成公钥了。
现在我有m e q p 要如何生成私钥,按照生成公钥的方式一解密就会出错,指针d为空,要如何才能生成私钥。有没有谁知道啊。我用的是openssl带的RSA算法,要用什么函数才能实现啊,请各位大哥指教啊。

14 个解决方案

#1


RSA加密,没有人知道吗??

#2


《算法描述 C语言描述》上面有完整算法代码
这本书还没看呢   整天SQL ADO.NET 

#3


没人知道openssl 的RSA 的用法吗?

#4


该回复于2012-11-18 23:32:23被管理员删除

#5


引用 4 楼 jsjisweet 的回复:
楼主 我也是C++学习新手,自从这一个多月的学习以来,我还是个菜鸟。在这论坛发了很多求教贴,到现在没分数了,今天看书又遇到几个不会的,想法贴没分。看到你的帖子深表同情,可惜帮不上什么忙。如果楼主照顾咱就给点分数我吧,多少你看着给吧。让我能多发几个题目,兄弟在此谢谢了!
捐给你200分 应该收到180分吧! 我也没什么分了  楼主加油   先下论坛了   

#6


引用 5 楼 zhuankeshumo 的回复:
引用 4 楼 jsjisweet 的回复:
楼主 我也是C++学习新手,自从这一个多月的学习以来,我还是个菜鸟。在这论坛发了很多求教贴,到现在没分数了,今天看书又遇到几个不会的,想法贴没分。看到你的帖子深表同情,可惜帮不上什么忙。如果楼主照顾咱就给点分数我吧,多少你看着给吧。让我能多发几个题目,兄弟在此谢谢了!捐给你200分 应该收到180分吧! 我也没什么分了  楼主加油   先下论坛了   ……

真的谢谢这位朋友,我回努力的!

#7


各位大哥。帮帮忙了。真不人懂RSA吗?

#8


没人知道吗,求解!

#9


这个可以自己试着先谷歌  网上学习资源很多 并不局限于CSDN

#10


我也只能帮顶了,坐等楼下大侠 RSA得到了m e q p如何生成私钥

#11


也可以去图书馆查阅相关书籍

#12


...求解啊,没人知道吗

#13


得到公钥只有m e就行了


int r = BN_hex2bn(&rsa->n, Mstring);
r = BN_hex2bn(&rsa->e,Estring);
r = BN_hex2bn(&rsa->p,Pstring);
r = BN_hex2bn(&rsa->q,Qstring);



BIGNUM *r0=NULL,*r1=NULL,*r2=NULL;
    BN_CTX *ctx=NULL;
    BIGNUM local_r0,local_d,local_p;
    BIGNUM *pr0,*d,*p;
    ctx=BN_CTX_new();
    r0 = BN_CTX_get(ctx);
    r1 = BN_CTX_get(ctx);
    r2 = BN_CTX_get(ctx);
    rsa->d = BN_CTX_get(ctx);
    rsa->dmp1 = BN_CTX_get(ctx);
    rsa->dmq1 = BN_CTX_get(ctx);
    rsa->iqmp = BN_CTX_get(ctx);
    if (!BN_sub(r1,rsa->p,BN_value_one())) goto err;   
    if (!BN_sub(r2,rsa->q,BN_value_one())) goto err;   
    if (!BN_mul(r0,r1,r2,ctx)) goto err;    
    if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
        {
          pr0 = &local_r0;
          BN_with_flags(pr0, r0, BN_FLG_CONSTTIME);
        }
    else
      pr0 = r0;
    if (!BN_mod_inverse(rsa->d,rsa->e,pr0,ctx)) 
goto err; 

  
    if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
        {
        d = &local_d;
        BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
        }
    else
        d = rsa->d;

  
    if (!BN_mod(rsa->dmp1,d,r1,ctx))
goto err;

   
    if (!BN_mod(rsa->dmq1,d,r2,ctx))
goto err;

    
    if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
        {
        p = &local_p;
        BN_with_flags(p, rsa->p, BN_FLG_CONSTTIME);
        }
    else
        p = rsa->p;
    if (!BN_mod_inverse(rsa->iqmp,rsa->q,p,ctx)) 
goto err;
    r = RSA_check_key(rsa);

#14


RSA得到了m e q p如何生成私钥

#1


RSA加密,没有人知道吗??

#2


《算法描述 C语言描述》上面有完整算法代码
这本书还没看呢   整天SQL ADO.NET 

#3


没人知道openssl 的RSA 的用法吗?

#4


该回复于2012-11-18 23:32:23被管理员删除

#5


引用 4 楼 jsjisweet 的回复:
楼主 我也是C++学习新手,自从这一个多月的学习以来,我还是个菜鸟。在这论坛发了很多求教贴,到现在没分数了,今天看书又遇到几个不会的,想法贴没分。看到你的帖子深表同情,可惜帮不上什么忙。如果楼主照顾咱就给点分数我吧,多少你看着给吧。让我能多发几个题目,兄弟在此谢谢了!
捐给你200分 应该收到180分吧! 我也没什么分了  楼主加油   先下论坛了   

#6


引用 5 楼 zhuankeshumo 的回复:
引用 4 楼 jsjisweet 的回复:
楼主 我也是C++学习新手,自从这一个多月的学习以来,我还是个菜鸟。在这论坛发了很多求教贴,到现在没分数了,今天看书又遇到几个不会的,想法贴没分。看到你的帖子深表同情,可惜帮不上什么忙。如果楼主照顾咱就给点分数我吧,多少你看着给吧。让我能多发几个题目,兄弟在此谢谢了!捐给你200分 应该收到180分吧! 我也没什么分了  楼主加油   先下论坛了   ……

真的谢谢这位朋友,我回努力的!

#7


各位大哥。帮帮忙了。真不人懂RSA吗?

#8


没人知道吗,求解!

#9


这个可以自己试着先谷歌  网上学习资源很多 并不局限于CSDN

#10


我也只能帮顶了,坐等楼下大侠 RSA得到了m e q p如何生成私钥

#11


也可以去图书馆查阅相关书籍

#12


...求解啊,没人知道吗

#13


得到公钥只有m e就行了


int r = BN_hex2bn(&rsa->n, Mstring);
r = BN_hex2bn(&rsa->e,Estring);
r = BN_hex2bn(&rsa->p,Pstring);
r = BN_hex2bn(&rsa->q,Qstring);



BIGNUM *r0=NULL,*r1=NULL,*r2=NULL;
    BN_CTX *ctx=NULL;
    BIGNUM local_r0,local_d,local_p;
    BIGNUM *pr0,*d,*p;
    ctx=BN_CTX_new();
    r0 = BN_CTX_get(ctx);
    r1 = BN_CTX_get(ctx);
    r2 = BN_CTX_get(ctx);
    rsa->d = BN_CTX_get(ctx);
    rsa->dmp1 = BN_CTX_get(ctx);
    rsa->dmq1 = BN_CTX_get(ctx);
    rsa->iqmp = BN_CTX_get(ctx);
    if (!BN_sub(r1,rsa->p,BN_value_one())) goto err;   
    if (!BN_sub(r2,rsa->q,BN_value_one())) goto err;   
    if (!BN_mul(r0,r1,r2,ctx)) goto err;    
    if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
        {
          pr0 = &local_r0;
          BN_with_flags(pr0, r0, BN_FLG_CONSTTIME);
        }
    else
      pr0 = r0;
    if (!BN_mod_inverse(rsa->d,rsa->e,pr0,ctx)) 
goto err; 

  
    if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
        {
        d = &local_d;
        BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
        }
    else
        d = rsa->d;

  
    if (!BN_mod(rsa->dmp1,d,r1,ctx))
goto err;

   
    if (!BN_mod(rsa->dmq1,d,r2,ctx))
goto err;

    
    if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME))
        {
        p = &local_p;
        BN_with_flags(p, rsa->p, BN_FLG_CONSTTIME);
        }
    else
        p = rsa->p;
    if (!BN_mod_inverse(rsa->iqmp,rsa->q,p,ctx)) 
goto err;
    r = RSA_check_key(rsa);

#14


RSA得到了m e q p如何生成私钥