【问题标题】:How to do decryption of a file in Java/Android which is encrypted using RSACertificate.der and RSAPrivatekey.p12如何解密使用 RSACertificate.der 和 RSAPrivatekey.p12 加密的 Java/Android 文件
【发布时间】:2014-05-15 06:41:35
【问题描述】:

我正在开发使用 RSA 算法进行加密和解密的 Android 应用程序。 我的意图是解密一个由服务器使用 RSACertificate.der 和 RSAPrivatekey.p12 文件加密的文件。

现在我有一个 Example.encriptedfile、RSACertificat.der 和 RSAPrivatekey.p12 文件 我想在 JAVA 中使用上述密钥解密上述 example.encrypted 文件

获取私钥的实现 而使用 Cipher 的解密代码是

文件是example.encrypted文件。

    byte[] descryptedData = null;
    try {
        byte[] data = new byte[(int) file.length()];
        new FileInputStream(file).read(data)

        KeyStore keystore = KeyStore.getInstance("PKCS12");
        keystore.load(con.getAssets().open("rsaPrivate.p12"), "password".toCharArray());
        pk = (PrivateKey)keystore.getKey("1", "password".toCharArray());

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, pk );
        descryptedData = cipher.doFinal(data);

    } catch (Exception e) {
        e.printStackTrace();
    }

    return new String(descryptedData);

闲置代码的异常是

java.security.InvalidKeyException: unknown key type passed to RSA
at com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineInit(CipherSpi.java:277)
at com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineInit(CipherSpi.java:381)
at javax.crypto.Cipher.init(Cipher.java:519)
at javax.crypto.Cipher.init(Cipher.java:479)

那么任何人都可以提供实施此的建议和解决方案

提前致谢。

但是一样

【问题讨论】:

    标签: java android encryption private-key


    【解决方案1】:

    如果使用私钥加密,则根本没有加密,因为任何可以获得公钥的人都可以解密它,可以是任何人。

    如果真的要加密它,它应该已经用 public 密钥加密了。

    然而,可能的意图是签署它,在这种情况下,你要做的就是对照公钥验证它。您需要证书中的公钥。因此,您使用java.security.cert API 将证书加载到Certificate,,然后使用从Certificate. 获得的公钥使用java.security.Signature 对象来验证签名

    【讨论】:

    • 是的,我正在使用相同的 API,例如 KeyStore keystore = KeyStore.getInstance("PKCS12"); keystore.load(con.getAssets().open("rsaPrivate.p12"), "password".toCharArray()); pk = (PrivateKey)keystore.getKey("1", "password".toCharArray());
    • 上面的代码可以得到私钥,但是在使用 Cipher cipher = Cipher.getInstance("RSA"); 进行解密时cipher.init(Cipher.DECRYPT_MODE, pk); descryptedData = cipher.doFinal(data);获取 java.security.InvalidKeyException 异常:在 com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineInit(CipherSpi.java:277) 处传递给 RSA 的未知密钥类型
    • 你似乎没有读过我说的一个字。在任何情况下,您都需要发布这些异常及其整个堆栈跟踪和您的代码。将其编辑到您的问题中。并指出哪一行是哪一行。
    猜你喜欢
    • 2017-04-30
    • 2016-05-04
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多