2011-12-07 58 views
2

我試圖使用加密使用一個.pfx證書文件的文本文件:如何使用Android的X509公共證書進行加密?

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. 此功能是否正確?

回答

0

我不認爲你的代碼會起作用。 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文件作爲資源到您的andoid應用:Load file from resource

+0

謝謝你,我會檢查出保護。 – Chris

+0

我用portecle專家的.CER(我選擇導出>頭榮譽證書和DER編碼),現在得到的錯誤 java.lang.IllegalArgumentException異常:錯誤的序列大小:3 但X509CertificateStructure不n要似乎存在? 我一直在閱讀這個http://bouncy-castle.1462172.n4.nabble.com/J2ME-SubjectPublicKeyInfo-Bad-sequence-size-td1467139.html – Chris