2011-04-19 58 views
6

我是密码世界的新手。我需要从下面提供的数据中生成相应的RSA私钥。加密:使用模和指数生成RSA私钥

Modulus B87BDAB530F8FDED78223D841C5D4E66A6CA86E1D690E829755F244B6FA64D0B8FFBB33AC46FE533568FD6A965EDE7AFFAED8B15476E7B70D637188B8E6B78FDAE17941E7A1304699405F94FD8E596A2BA1CA57D413E96F6E9A3F7585EEF156E8220E7C45DCB48C6CC667AC52E521444225DD6F5611CE8C14DF680C291CFDFE5 

Modulus 
(Base 64) uHvatTD4/e14Ij2EHF1OZqbKhuHWkOgpdV8kS2+mTQuP+7M6xGlM1aP1qll7eev+u2LFUdue3DWNxiLjmt4a4XlB56EwRplAX5T9jllqK6HKV9QT6W9umj91he7xVugiDnxF3LSMbMZnrFLlIURCJd1vVhHOjBTfaAwpHP3+U= 

Private Exponent 84920445868EB73309CC593671879F8A66BB4D18472F54964E50F36CFE2B9C5BFDB8DB4014DF6FEE677AEFC0458E239B338FB60DB18A344C8EB38300EE744EB98B2606AC4781C4C9317B0289F41D7E92C927639E699D0E903B5160D9AEBFD70C1D6EBA539774459B95107E60941B22EECD54F7D0C8DE47DA7719C33FD4DB9155 

Private Exponent (Base 64) hJIERYaOtzMJzFk2cYefima7TRhHL1SWTlDzbP4rnFv9uNtAFN9v7md678BFjiObM4+2DbGKNEyOs4MA7nROuYsmBqxHgcTJMXsCifQdfpLJJ2OeaZ0OkDtRYNmuv9cMHW66U5d0RZuVEH5glBsi7s1U99DI3kfadxnDP9TbkVU= 

Public Exponent 010001 

Public Exponent (Base 64) AQAB 

我用下面的方法来生成RSAPrivateKey但密钥不正确。

char *szModulus = "B87BDAB530F8FDED78223D841C5D4E66A6CA86E1D690E829755F244B6FA64D0B8FFBB33AC46FE533568FD6A965EDE7AFFAED8B15476E7B70D637188B8E6B78FDAE17941E7A1304699405F94FD8E596A2BA1CA57D413E96F6E9A3F7585EEF156E8220E7C45DCB48C6CC667AC52E521444225DD6F5611CE8C14DF680C291CFDFE5" ; 
    char *szExp = "84920445868EB73309CC593671879F8A66BB4D18472F54964E50F36CFE2B9C5BFDB8DB4014DF6FEE677AEFC0458E239B338FB60DB18A344C8EB38300EE744EB98B2606AC4781C4C9317B0289F41D7E92C927639E699D0E903B5160D9AEBFD70C1D6EBA539774459B95107E60941B22EECD54F7D0C8DE47DA7719C33FD4DB9155" ; 
    char *szPubExp = "010001" ; 


    RSA* rsa = RSA_new(); 

    int ret = BN_hex2bn(&rsa->n,szModulus) ; 
    ret = BN_hex2bn(&rsa->d,szExp) ; 
    ret = BN_hex2bn(&rsa->e,szPubExp) ; 

if (!PEM_write_RSAPrivateKey(fp, rsa, NULL, NULL, 0, 0, NULL)) 
    { 
     printf("\n PEM_write_PrivateKey failed \n") ; 

    } 
/**/ 
+0

听起来像作业 – Tobias 2011-04-19 09:34:45

回答

3

的模量和私人指数私钥,至少在一种简化的方式。使用RSA,通常在私钥中包含一些其他参数,例如模数的两个(或更多)素因子。这些额外的参数不提供更多电源(模数和专用指数足以计算签名和解密数据),但允许更快的实现(以3倍到4倍的倍数)。

因此,考虑到上述信息,可能的问题是恢复模数的主要因素。 Handbook of Applied Cryptography第8章第8.2.2节(i)(与保理关系的关系),第287页给出了通用方法。

+0

但根据文档可能使用私钥生成模数,私人指数和公开指数。我发布了上面的代码片段。但没有得到正确的关键。 – Amit 2011-04-19 12:46:27

+0

您的代码有效:它会生成一个遵循简化格式(仅包含模数和私有指数)的私钥。如果你想要更常用的全格式,你必须用'p','q','dmp1','dmq1','iqmp'来填充'RSA'结构。这些值可以使用我在我的答案中链接的方法重新计算。 – 2011-04-19 13:13:08

+0

谢谢托马斯指着我正确的方向;你能指点我一些实际的代码(C/Java/.NET),我可以用它来获取素数。 – Amit 2011-04-20 05:28:00