从C中的字符串加载openssl RSA密钥

时间:2012-09-08 16:32:06

标签: c openssl pem

我在理解用于将密钥加载到RSA中的函数时遇到一些麻烦。

我从本地数据库中获取字符串形式的密钥:

  

-----开始公钥----- migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqdcz4npasjgxrcv8fwqcrdw + cze   76l3inzil3mquizvuyyn5heqqsrvg7 / 4mu1czc5fghcuk2pbfjgk9ev3xz6soxpk   pkhkxot87xgkmi1hulszcyouhvrtgkgcbk / kuktqozklgbolxf + cxigdptpgareg   DP + 6ieuziwsfpjrkjwidaqab   -----结束公钥-----

然后我尝试这样的事情(在objective-c中):

long len = [key length];
const unsigned char *p = (unsigned char *)[key UTF8String];
RSA *r = d2i_RSA_PUBKEY(NULL, &p, len);

总是回来null所以我在那里做错了。我已经尝试过其他一些东西,但我想我错过了它。最终目标是从我的公钥创建一个RSA,然后使用类似

的东西
RSA_public_encrypt ( 1, hash,    secret,     r, RSA_PKCS1_OAEP_PADDING );

要加密哈希,但我仍然不能加载我的密钥:)感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:3)

在我的头撞墙后一天,我终于找到了解决办法。当我存储密钥时,我意外地降低了密钥并没有帮助......

无论如何,这就是我所做的,假设您的密钥位于名为key的NSString中,此代码将为您加载。

const char *p = (char *)[key UTF8String];

BIO *bufio;
RSA *rsa;
NSUInteger byteCount = [key lengthOfBytesUsingEncoding:NSUTF8StringEncoding];

bufio = BIO_new_mem_buf((void*)p, byteCount);
RSA *myRSA = PEM_read_bio_RSA_PUBKEY(bufio, 0, 0, 0);