我已经挣扎了好几天,在互联网上找不到任何准确的例子/教程,所以现在我在这里寻求帮助。
我有一个创建 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中获取。