2012-07-13 68 views
3

我正在读取xcode中的应用程序的加密字符串,我必须编写一个使用RSA解密来解码和显示消息的函数。Xcode Openssl需要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的指南?

如果您需要关于此问题的更多信息,请让我知道。

预先感谢您。

回答

1

你可能想看看苹果的例子,它使用安全转换(这避免了openssl)在他们的Security Overview

有点运气,你可以用苹果变换做些事情,然后使用该程序。

如果不是 - 或者由于某种原因,您确实想要使用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); 

其中填充是从人页的值之一。

对于初始化,rsa的值稍微复杂一些,因为这是您设置密钥的位置,不是这样的位置。检查填充它的各种方式为例进行了rsa.c文件 - 这通常归结为类似:

EVP_PKEY *pkey = load_key(... , password,...); 
rsa = EVP_PKEY_get1_RSA(pkey); 

其中load_key从OpenSSL的的应用实例借来的。

+0

对不起,我仍然无法理解这一点。在数组中需要解密哪个字节数组。这与我初始化和rsa有什么关系?除了密码之外,还有什么需要加载密钥功能?为什么你要给rsa提供私钥的值? – user1431272 2012-07-17 15:09:45

+0

ok - 字符数组'in'对应于您的“来自xcode中的应用程序的加密字符串”。一旦你解密它 - 你会得到一个新的字节数组 - 现在处于“out”状态。为了解密某个需要密钥的东西。在这种情况下,RSA密钥就像你说'RSA解密'一样。 – 2012-07-17 15:32:54

+0

我尝试了一些你的命令,我得到这个错误:为i386硬件架构未定义的符号: “_RSA_size”,从引用: - [视图控制器barcodeData:类型:]在ViewController.o “_RSA_private_decrypt”,从引用: - ViewController.o中的[ViewController barcodeData:type:] ld:符号(s)找不到架构i386任何想法如何解决这个问题?我在这里提供了一些额外的细节:http://stackoverflow.com/questions/11525706/openssl-mach-o-linker-error-for-architecture-i386-and-armv7 – user1431272 2012-07-17 18:29:14