将Ruby代码从Apple文档(iPhoneOTAConfiguration)转换为Java

时间:2012-05-31 11:55:49

标签: ios ruby java-ee encryption mdm

我正在为iOS MDM工作。 其中,mobileconfig中的有效负载在发送到设备之前要加密。 Apple文档给出了以下代码为例,它在Ruby中运行良好。 但是,我无法在Java中实现相同的功能。

OpenSSL::PKCS7.encrypt(p7sign.certificates,
payload, OpenSSL::Cipher::Cipher::new("des-ede3-cbc"),
OpenSSL::PKCS7::BINARY)

我使用的Java代码如下:

     PublicKey publicKey = x509cert.getPublicKey();
    //publinKey is key extracted from iOS device response stream

    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    clearText = payloadContents.getBytes();
    //payloadContents are contents to be encrypyted
    cipherText = cipher.doFinal(clearText);
执行此操作后出现

错误

java.security.InvalidKeyException:没有安装的提供程序支持此密钥:sun.security.rsa.RSAPublicKeyImpl     在javax.crypto.Cipher.a(DashoA13 * ..)     在javax.crypto.Cipher.init(DashoA13 * ..)     在javax.crypto.Cipher.init(DashoA13 * ..)

1 个答案:

答案 0 :(得分:1)

PKCS7.encrypt生成CMS RFC中指定的EnvelopedData。这不仅仅是加密内容,它是涉及加密的ASN.1数据结构的规范。

为了生成或解密类似于Java的东西,我建议使用Bouncy Castle作为工作,可以找到相关课程的Javadoc here - 特别关注CMSEnvelopedData和朋友。

您在Ruby调用中传递的证书用于创建RecipientInfo结构,使用CMSEnvelopedDataGenerator类可以实现类似的功能。