【问题标题】:Initialize Public Key From Modulus & Exponent using OpenSSL使用 OpenSSL 从模数和指数初始化公钥
【发布时间】:2011-12-12 06:32:42
【问题描述】:

在给定 API 模数和指数的情况下尝试生成 RSA 公钥。我在 iOS 4.2 上使用 OpenSSL。

手动生成公钥是一个选项(见下文),但我不确定如何在模数中包含指数逻辑

-----BEGIN PUBLIC KEY-----
Modulus from API
-----END PUBLIC KEY-----

基于@James cmets,我可以编写公共 pem 但得到空白私钥。这是我的代码:

char szModulus = "1162" ;
char *szExp = "827655" ;
RSA* rsa = RSA_new();
int ret = BN_hex2bn(&rsa->n,szModulus) ;
ret = BN_hex2bn(&rsa->d,szExp) ;
FILE *fp = fopen("/Users/ysi/Desktop/privateKey.pem", "wb"); 
PEM_write_RSAPrivateKey(fp, rsa, NULL, NULL, 0, 0, NULL);

【问题讨论】:

  • "... 但是获取空白私钥..." - RSA * 可以用作公钥和私钥。您只向RSA * 提供了公钥部分。私钥部分不会从公钥部分神奇地出现。如果你能做到这一点,那么大多数(全部?)整数分解密码学 (IFC) 都会崩溃。

标签: objective-c encryption openssl rsa


【解决方案1】:

为此,请确保您已链接 OpenSSL 库(此处为说明http://code.google.com/p/ios-static-libraries/

链接后,您将可以访问多个 BIGNUM 转换器。我使用 BN_hex2bn 方法将模数转换为十六进制,将十六进制字符串保存为“指数”

然后创建 BIGNUM 结构并使用 RSA_public_encrypt 进行加密

RSA *rsa = NULL;

rsa->n = BN_new();
BN_copy(rsa->n,modulus);   
rsa->e = BN_new();
BN_copy(rsa->e,exponent);     
rsa->iqmp=NULL;
rsa->d=NULL;
rsa->p=NULL;
rsa->q=NULL;

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2013-04-07
    • 2015-06-22
    • 2012-11-19
    • 2012-07-25
    • 2018-06-10
    相关资源
    最近更新 更多