如何使用Android的X509公共证书进行加密?

时间:2011-12-07 15:23:30

标签: java android encryption x509

我正在尝试使用以下内容使用.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. 这个功能是否正确?

1 个答案:

答案 0 :(得分:0)

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

因此,您有以下两个选项:

  1. 从PFX文件中提取证书作为CER文件(例如,使用GUI工具portecle)或
  2. 尝试将PFX文件作为PKCS#12 KeyStore读取,如下所示:PKCS12 Java Keystore from CA and User certificate in java
  3. 最后,您可以将PFX / CER文件作为资源包含在您的andoid应用中:Load file from resource