【问题标题】:How to encrypt using a X509 public cert with Android?如何在 Android 上使用 X509 公共证书进行加密?
【发布时间】:2012-01-15 02:37:51
【问题描述】:

我正在尝试使用 .pfx 证书文件加密文本文件:

public void EncryptUsingPublicKey(File in, File out, File publicKeyFile) throws IOException, GeneralSecurityException {

    byte[] encodedKey = new byte[(int)publicKeyFile.length()];
    new FileInputStream(publicKeyFile).read(encodedKey);

    // create public key
    X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedKey);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    PublicKey pk = kf.generatePublic(publicKeySpec);

    FileInputStream is = new FileInputStream(in);
    Cipher pkCipher = Cipher.getInstance("RSA");
    pkCipher.init(Cipher.ENCRYPT_MODE, pk);
    CipherOutputStream os = new CipherOutputStream(new FileOutputStream(out), pkCipher);
    copy(is, os);
    os.close();
}

我有两个问题:

  1. 我应该将 .pfx 文件存储在设备的什么位置?
  2. 这个函数正确吗?

【问题讨论】:

    标签: java android encryption x509


    【解决方案1】:

    我认为您的代码不会起作用。 PFX 文件是内部 AFAIR PKCS#12 文件,可以包含多个证书和密钥。您使用的 X509EncodedKeySpec 要求在 .CER 文件(DER/二进制格式)中只有一个证书。

    因此你有以下两种选择:

    1. 从 PFX 文件中提取证书作为 CER 文件(例如使用 GUI 工具 portecle)或
    2. 尝试将 PFX 文件作为 PKCS#12 密钥库读取,此处显示:PKCS12 Java Keystore from CA and User certificate in java

    最后,您可以将 PFX/CER 文件作为资源包含到您的 Android 应用程序中:Load file from resource

    【讨论】:

    • 谢谢你,我会检查 protecle。
    • 我使用 portecle 来鉴定 .cer(我选择 Export > Head Certifcate and DER Encoded),现在得到错误 java.lang.IllegalArgumentException: Bad sequence size: 3 But X509CertificateStructure does not seem to exist ?我一直在读这个bouncy-castle.1462172.n4.nabble.com/…
    猜你喜欢
    • 1970-01-01
    • 2018-08-03
    • 2014-03-14
    • 2010-12-19
    • 2010-09-25
    • 2016-09-14
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多