2012-09-08 96 views
2

我在理解使用什么函数将密钥加载到RSA中时遇到了一些麻烦。从C中的字符串加载openssl RSA密钥

我得到这样的字符串形式的键从本地数据库:

-----开始公钥----- migfma0gcsqgsib3dqebaquaa4gnadcbiqkbgqdcz4npasjgxrcv8fwqcrdw +捷克 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); 

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

RSA_public_encrypt (1, hash, secret,  r, RSA_PKCS1_OAEP_PADDING); 

要加密哈希,但我卡在装载了我的钥匙:)任何帮助表示赞赏。

谢谢。

+0

尝试使用'ERR_get_error()'获取有关OpenSSL错误的信息。 – arrowd

+0

谢谢,我得到错误号218529960哪个google告诉我意味着asn1编码例程:ASN1_CHECK_TLEN:错误的标记 –

回答

3

经过一天撞在墙上我的头我终于找到了解决方案。这并没有帮助,我不小心降低了下来的密钥,当我存储它...

无论如何,这是我所做的,假设你的密钥在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);