1

我使用 java 生成了一个公钥/私钥对。因为我想将密钥添加到我的代码(而不是文件)中,所以我使用了

byte[] priv = private_key.getEncoded() 

将其作为字节数组获取。从我使用的字节数组中取回私钥

PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(priv);

解密按预期工作。但现在我想使用 openssl 在 ac 应用程序中使用该密钥。所以我将字节数组从java复制到c作为char []。但我无法将此 char[] 转换为私钥以通过 RSA_public_decrypt(...) 将其用于解密我试过

RSA *r = d2i_RSAPrivateKey(NULL,&priv, len);

但这总是返回一个 NULL 指针

谁能给我一个关于如何用c语言做到这一点的提示?

编辑:同时我检查了openssl的错误代码,它说

错误:0D0680A8:lib(13):func(104):reason(168)

但我不知道如何处理这些错误代码。在网上搜索还没有帮助。

提前谢谢了。问候,-克里斯-

4

2 回答 2

1

您是在复制编码的二进制数据还是只是从文件中读取的二进制数据?请参阅如何使用 OpenSSL C 库将 RSA 密钥从二进制数据加载到 RSA 结构?

于 2012-08-09T07:14:11.107 回答
1

感谢 srikanth yaradla 的提示,我找到了正确的方向。我是这样做的:

const unsigned char private_key[] = {0x30,...};
size_t private_key_len = sizeof(private_key);
char* buf = (char*)malloc(private_key_len);
memcpy(buf, private_key, private_key_len);
BIO* mem=BIO_new_mem_buf(buf, private_key_len);
PKCS8_PRIV_KEY_INFO* p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(mem, NULL);
EVP_PKEY* pkey = EVP_PKCS82PKEY(p8inf);
RSA* r = EVP_PKEY_get1_RSA(pkey);

这样做之后,我现在可以轻松地解密从 java 部分获得的数据。

于 2012-08-09T19:53:47.820 回答