现在我有m e q p 要如何生成私钥,按照生成公钥的方式一解密就会出错,指针d为空,要如何才能生成私钥。有没有谁知道啊。我用的是openssl带的RSA算法,要用什么函数才能实现啊,请各位大哥指教啊。
14 个解决方案
#1
RSA加密,没有人知道吗??
#2
《算法描述 C语言描述》上面有完整算法代码
这本书还没看呢 整天SQL ADO.NET
这本书还没看呢 整天SQL ADO.NET
#3
没人知道openssl 的RSA 的用法吗?
#4
#5
捐给你200分 应该收到180分吧! 我也没什么分了 楼主加油 先下论坛了
#6
真的谢谢这位朋友,我回努力的!
#7
各位大哥。帮帮忙了。真不人懂RSA吗?
#8
没人知道吗,求解!
#9
这个可以自己试着先谷歌 网上学习资源很多 并不局限于CSDN
#10
我也只能帮顶了,坐等楼下大侠
#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);
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
#1
RSA加密,没有人知道吗??
#2
《算法描述 C语言描述》上面有完整算法代码
这本书还没看呢 整天SQL ADO.NET
这本书还没看呢 整天SQL ADO.NET
#3
没人知道openssl 的RSA 的用法吗?
#4
#5
捐给你200分 应该收到180分吧! 我也没什么分了 楼主加油 先下论坛了
#6
真的谢谢这位朋友,我回努力的!
#7
各位大哥。帮帮忙了。真不人懂RSA吗?
#8
没人知道吗,求解!
#9
这个可以自己试着先谷歌 网上学习资源很多 并不局限于CSDN
#10
我也只能帮顶了,坐等楼下大侠
#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);
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);