关于RSA加解密的公钥和私钥

路之远 2011-01-25 06:00:15
最近在搞Rocky3(usbkey)的RSA加解密,Rocky3自动生成的RSA公钥是140个字节,私钥是340个字节,而我看了windows API生成的公钥私钥都是1024 或者 2048位,就是128字节或者256字节,谁能指点下 这到底怎么回事啊。
...全文
930 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiang81020 2011-01-28
  • 打赏
  • 举报
回复
你得了解rockey3的中公私钥整个结构,将这些部分提取出来
第一部分 p;
第二部分 q;
第三部分 dp;
第四部分 dq;
第五部分 InvQ;

是不是还缺少m、e?
OPENSSL库记得使用的是REF结构,分别将你提取出来的参数填入到REF结构中,就可以了。
ThinkHand 2011-01-28
  • 打赏
  • 举报
回复
看来你基本已经知道了问题的所在了,就是你用的那个rockey3他生成的RSA的私钥里包含了RSA所用到的几个重要数据才会产生公钥跟私钥不一样长度的问题。如果你用libeasy来做的话导出来的私钥也是跟公钥不一样长多的。包含那几个参数用生成的私钥就可以推导出来公钥的。你可以用分别读取出来那几个参数和私钥的数据,然后再用设置密钥参数的那个api函数设置一下试试。
生成一个密钥容器->生成一个RSA的密钥->设置密钥参数为你读到几个参数.按照这个步骤试验一下看看。因为我没有用过rockey这个东西。只用了用wincrypt,能给你的建议就这么多了。愿你早日搞定。新年快乐。
ischarles 2011-01-28
  • 打赏
  • 举报
回复
公钥的长度无所谓,私钥的长度是越长越好,一般私钥用的是1024位.因为对当今的计算机而言1024位是需要花很长时间才能破解的.
路之远 2011-01-26
  • 打赏
  • 举报
回复
后来咨询了下rockey3的密钥对格式是这样的

R3 RSA公私钥格式

公钥:140字节,一共有两部分组成n和e,对应的结构体如下
n占前132字节,对应得结构体如下:
struct
{
BYTE bTagHigh;
BYTE bTagLow;
BYTE bLenHigh;
BYTE bLenLow; //128
BYTE bData[128];
}
bData中是真正的公钥。
e占后8字节,结构入下:
struct
{
BYTE bTagHigh;
BYTE bTagLow;
BYTE bLenHigh;
BYTE bLenLow; //4
BYTE bData[4];
}
bData中为指数。


私钥:340字节,一共5部分,每部分为68字节,每个部分的结构为:
struct
{
BYTE bTagHigh;
BYTE bTagLow;
BYTE bLenHigh;
BYTE bLenLow;
BYTE bData[64];
}

第一部分 p;
第二部分 q;
第三部分 dp;
第四部分 dq;
第五部分 InvQ;

这是rockey3自己生成的RSA密钥对格式,和标准的RSA公钥私钥对不一样。。我现在想把公钥导入微软的密钥库中使用,据说要转化一下,用VC下的一个openssl库文件来转化,谁能指点下该如何转换,万分感谢
qq120848369 2011-01-25
  • 打赏
  • 举报
回复
越大越安全,这个无所谓的事.

RSA算法生成两个大素数,p和q。 求n=p*q,f(n)=(p-1)*(q-1),随机得到一个e,gcd(e,f(n))=1

e就是用于加密的密钥,当然越大越好,就这样。

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧