4

我正在尝试使用 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-----
4

1 回答 1

2

您读取 RSA 公钥的程序很好。

问题在于

RSA_check_key

请在此处阅读有关 RSA_check_key的信息。

它不适用于公钥。您需要此功能的私钥。这就是它崩溃的原因,因为它确实有它的私钥。由于之前的回答给您带来不便,敬请见谅。

http://www.openssl.org/docs/crypto/RSA_check_key.html

于 2013-04-18T06:37:11.210 回答