java - 在 openssl 的 native 代码中使用来自 java 的私钥

标签 java c openssl

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

byte[] priv = private_key.getEncoded() 

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

PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(priv);

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

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

但这总是返回一个 NULL 指针

任何人都可以给我一个关于如何用 C 语言执行此操作的提示吗?

编辑:同时我检查了 openssl 的错误代码,上面写着

error:0D0680A8:lib(13):func(104):reason(168)

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

提前非常感谢。 你好,-克里斯-

最佳答案

您是复制编码的二进制数据还是仅复制从文件中读取的二进制数据? 看这个How to load an RSA key from binary data to an RSA structure using the OpenSSL C Library?

关于java - 在 openssl 的 native 代码中使用来自 java 的私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11878271/

相关文章:

c - 我试图找到数组中仅使用一次的数字。

c - C中的printf函数如何获取可变参数列表中每个参数的大小?

java - C++ openssl SHA256 运行速度比 JDK SHA256 实现慢

c++ - 准备两个具有相同 SSL_CTX 状态的应用程序数据

java - PL/SQL对象成员函数-java方法

java - 如何使用 Wicket 7 制作可缓存的图像?

java - iCal4j 更新和删除 iCalendar 中的 VEvent

c - gstreamer 代理 rtspsrc 到 tcpserver

rsa - 带有 PKCS1-PSS 填充的 RSA 签名的 maskGenAlgorithm

java - vector 和数组列表哪一个更好用?