OpenSSL RSA 密钥对,采用 C 或 Obj-C 的 X509 和 PKCS#8 编码



我已经挣扎了好几天,在互联网上找不到任何准确的例子/教程,所以现在我在这里寻求帮助。

我有一个创建 RSA 密钥对的 Java 应用程序。此密钥对用于加密和解密对称密钥。(但首先要测试我想使用一个简单的文本字符串)。生成密钥对后,将对密钥进行编码。

PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(pbKey));

PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(pvBytes);

现在我正在 iOS 上创建一个应用程序。我想在iOS(C或Objective-C)中使用OpenSSL做同样的事情。

有人可以帮助我吗?

我正在像这样创建密钥

RSA_generate_key_ex(rsa, modulus, e, NULL);
基本上,

您拥有的是私钥(ks)的PKCS#8编码。 即.raw ASN.1。

我假设你把它写出来是原始的,编码的(Java非对称加密:存储公钥/私钥的首选方式,解密的字符串与预加密的字符串不同)。

因此,确保 rsa 已填充;而"enc"是

    const EVP_CIPHER *enc=NULL;

或更有可能

    const EVP_CIPHER *enc=EVP_aes_XXX_cbc();

其中 XXX 是大约 128 位,然后你可以用类似的东西来调用PEM_write_bio_RSAPrivateKey:

    PW_CB_DATA cb_data;
    cb_data.password = passout;
    cb_data.prompt_info = outfile;
    BIO_set_fp(out,stdout,BIO_NOCLOSE);
    if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,
            (pem_password_cb *)password_callback,&cb_data))
            goto err;

这应该是大致的。代码可以从任何openssl源代码发行版中的apps/genrsa.c中获取。

最新更新