我正在从xcode中的应用程序读取加密字符串,我必须编写一个使用RSA解密来解码和显示消息的函数。
我完全迷失在哪里开始。
我有Openssl在xcode中编写,我使用的是openssl / rsa.h文件。
我正在尝试使用该功能:
RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding);
但后来我在Openssl主站点的某个地方读到该函数只返回一个数字,而不是实际的字符串。我也不知道要通过哪些参数。
我找到的唯一引用是openssl / rsa.h文件并查看它包含的函数。
我在过去的几个小时里尝试过做一些研究,但我没有找到任何答案。
我想知道是否有一个简单的函数可以传递我的加密字符串和我的私钥(使用文件或硬编码)并且它可以返回解密的字符串?
如果没有关于如何使用Objective C编程使用Openssl的指南?
如果您需要有关此问题的更多信息,请与我们联系。
提前谢谢。
答案 0 :(得分:1)
您可能希望查看Apple的示例,该示例在Security Overview中使用安全性转换(这可以避免使用openssl)。
运气好的话,你可以用苹果变换来做事,然后继续使用那个程序。
如果没有 - 或者由于某种原因你真的想使用openssl;然后openssl源包含示例文件openssl-0.9.8t/apps/rsa.c
,它几乎允许选择性剪切和粘贴使事情有效。
从命令行执行man RSA_private_decrypt
将显示手册页(或从Xcode到手册页)。或者查看http://www.openssl.org/docs/crypto/RSA_public_encrypt.html。
上述使用示例:
unsigned char in[] = { 1, 2, ... byte array to decrypt };
// size of that in byte array
int inlen = sizeof(in);
// output buffer size depends on the key type.
char * out = malloc(RSA_size(rsa));
int e = RSA_private_decrypt(inlen, in, out, rsa, RSA_PKCS1_PADDING);
其中padding是手册页中的值之一。
初始化时,rsa的值有点复杂,因为这是设置密钥的地方,而不是。检查上面的rsa.c文件,了解各种填充方法的示例 - 它通常归结为:
EVP_PKEY *pkey = load_key( ... , password,... );
rsa = EVP_PKEY_get1_RSA(pkey);
其中load_key
是从openssl的应用示例中借用的。