Objective c 如何使用ASN.1 x509字节数组中的RSA公钥加密字符串?

Objective c 如何使用ASN.1 x509字节数组中的RSA公钥加密字符串?,objective-c,c,openssl,x509,asn.1,Objective C,C,Openssl,X509,Asn.1,我有一个ASN.1 x509字节数组,其中包含RSA对的模和公钥。我的目标是尽一切可能使用它来加密字符串。我正试图在objective-c中使用openssl来实现这一点。每当我尝试使用d2i\u X509获取RSA对象时,它都会返回null。如果我不能使用openssl实现这一点,我愿意切换到其他库。请帮我找到一些有效的方法。您通常不会直接使用X.509的公钥加密字符串。相反,您将生成一个强随机(特定质量)密钥;使用普通对称加密(如AES),然后使用该加密对字符串进行加密。然后用X.509加密

我有一个ASN.1 x509字节数组,其中包含RSA对的模和公钥。我的目标是尽一切可能使用它来加密字符串。我正试图在objective-c中使用openssl来实现这一点。每当我尝试使用
d2i\u X509
获取RSA对象时,它都会返回null。如果我不能使用openssl实现这一点,我愿意切换到其他库。请帮我找到一些有效的方法。

您通常不会直接使用X.509的公钥加密字符串。相反,您将生成一个强随机(特定质量)密钥;使用普通对称加密(如AES),然后使用该加密对字符串进行加密。然后用X.509加密随机密钥

查阅一本好的PKI/加密书(例如)了解原因(关于密钥泄漏、位翻转、填充和(重新)加密两次的章节)

如果您真的坚持这样做,请看看它的pkcs7_encode_rinfo函数

x509cert = ... something to read your x509 byte array in.

unsigned char *stuff = "Some zecret string";
int stufflen = strlen(stuff);

EVP_PKEY *pkey;
EVP_PKEY_CTX *pctx = NULL;

assert(pkey =  = X509_get_pubkey( x509cert));
assert(pctx = EVP_PKEY_CTX_new(pkey, NULL));
assert(EVP_PKEY_encrypt_init(pctx)==1);
assert((EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_ENCRYPT
                      EVP_PKEY_CTRL_PKCS7_ENCRYPT, 0, ri)==1);

size_t eklen;
assert(EVP_PKEY_encrypt(pctx, NULL, &eklen, stuff, stufflen)==1);

ek = OPENSSL_malloc(eklen);
assert(ek);

unsigned char *ek = NULL;
assert((EVP_PKEY_encrypt(pctx, ek, &eklen, key, keylen)==1);

printf("Encrypted blurp: ");
for(int i = 0; i < eklen; i++) {
    printf("0x%02X ", ek[i];
};
printf("\n");
exit(0);
x509cert=。。。用于读取x509字节数组的内容。
unsigned char*stuff=“Some zecret string”;
int stufflen=strlen(stufflen);
执行副总裁*PKEY;
EVP_PKEY_CTX*pctx=NULL;
断言(pkey==X509_get_pubkey(x509cert));
断言(pctx=EVP_PKEY_CTX_new(PKEY,NULL));
断言(EVP_PKEY_encrypt_init(pctx)==1);
断言((EVP_PKEY_CTX_ctrl(pctx,-1,EVP_PKEY_OP_ENCRYPT
EVP_PKEY_CTRL_PKCS7_ENCRYPT,0,ri)==1);
尺寸(t eklen);;
断言(EVP_PKEY_encrypt(pctx、NULL和eklen、stuff、stufflen)=1);
ek=OPENSSL_malloc(eklen);
断言(ek);
无符号字符*ek=NULL;
断言(EVP_PKEY_encrypt(pctx、ek和eklen、key、keylen)==1);
printf(“加密的简介:”);
对于(int i=0;i
您确定要使用RSA密钥对进行加密/解密,而不是使用对称会话密钥(这是由您的RSA密钥对加密的实际内容,而不是底层数据。这就是会话密钥的用途)吗?只是好奇。我确定。我有这个,需要使用它