Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Android的X509公共证书进行加密?_Java_Android_Encryption_X509 - Fatal编程技术网

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

Java 如何使用Android的X509公共证书进行加密?,java,android,encryption,x509,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).r

我正在尝试使用.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();
}
我有两个问题:

  • 我应该将.pfx文件存储在设备上的何处
  • 这个函数正确吗

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

    因此,您有以下两种选择:

  • 将PFX文件中的证书提取为CER文件(例如,使用GUI工具)或
  • 尝试将PFX文件作为PKCS#12密钥库读取,此处显示:

  • 最后,您可以将PFX/CER文件作为资源包含到您的andoid应用程序中:

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

    因此,您有以下两种选择:

  • 将PFX文件中的证书提取为CER文件(例如,使用GUI工具)或
  • 尝试将PFX文件作为PKCS#12密钥库读取,此处显示:

  • 最后,您可以将PFX/CER文件作为资源包含到您的andoid应用程序中:

    谢谢,我将检查protecle。我使用portecle来专家.CER(我选择导出>头部认证和DER编码)现在得到错误java.lang.IllegalArgumentException:Bad sequence size:3但X509CertificateStructure似乎不存在?我一直在读这篇文章,感谢这篇文章。我将检查protecle。我使用portecle来专家.cer(我选择Export>Head Certificate和DER Encoded),现在得到错误java.lang.IllegalArgumentException:错误序列大小:3,但X509CertificateStructure似乎不存在?我一直在读这个