我正尝试使用OpenSSL为应用程序添加RSA加密,但我无法获取要加载的证书。在我的应用程序中,公钥证书将从服务器分发,我需要使用该密钥并使用它来解密我的应用将扫描的加密条码中的内容。Objective-C with OpenSSL - 无法设置RSA密钥
我在安全库上选择OpenSSL的原因是我还需要ECDSA验证,目前本地不支持该验证。
我已经尝试了很多方法来获取加载密钥。 OpenSSL PEM_read_RSA_PUBKEY方法需要一个文件指针。但是,当我运行下面的代码时,只要我尝试访问密钥,就会崩溃EXC_BAD_ACCESS
。
NSString * path = [[NSBundle mainBundle] pathForResource: @"public" ofType: @"pem"];
FILE *f = fopen([path cStringUsingEncoding:1],"r");
if (f == NULL)
NSLog(@"%@", [path stringByAppendingString:@" not found"]);
RSA *rsa = PEM_read_RSA_PUBKEY(f,NULL,NULL,NULL);
fclose(f);
NSLog (@"%d KeyCheck", RSA_check_key(rsa));
我从OpenSSL库中包含下列头
#include <openssl/opensslv.h>
#include <openssl/crypto.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
我有其他OpenSSL的方法,如MD5,Base64编码/解码,SHA1和ECDSA代码工作正常,它只是路过在RSA证书,让我难住!
的public.pem密钥文件包含此项:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+ynZ7EvJ0F+IoGmlme/j/MpH4
7BxrIuDTJCOS99j82IL3Ww9Ubm28yOMHYPdi23WPDhR80ugaBWAnmqUZWvYKjqd4
Z4D0sJ0NVW3DDgZ4gS57zFqlvGgdVhzaVimfs7qDxIJ1o8GMuXWseZV2ZpmIjdnF
ZBol5zZTqNfk89RNnQIDAQAB
-----END PUBLIC KEY-----
你的文件必须由启动----- BEGIN RSA公钥---- – doptimusprime 2013-04-18 06:30:36
不知道,这是因为在命令行'OpenSSL的rsautl -verify -in加密的问题退房手续解密-inkey public.pem -pubin'在这个键上工作得很好。 – PassKit 2013-04-18 08:07:52
只是一个愚蠢的问题:你是否验证过'path','f'和'rsa'不是NULL? - 注意,* proper *方法是'FILE * f = fopen([path fileSystemRepresentation],“r”)'而不是魔术编码数字'1'。 – 2013-04-18 08:39:09