2013-12-19 29 views
0

我有一個PDF文件,我用這個代碼簽署這個文件:使用BouncyCastle的,以生成簽名的文件

certificate = (X509Certificate) loadKeyStore(certificateFile, password).getCertificate(alias); 
    privateKey = (PrivateKey) loadKeyStore(certificateFile, password).getKey(alias, alias.toCharArray()); 
    Security.addProvider(new BouncyCastleProvider()); 
    BufferedInputStream inFile = new BufferedInputStream(new FileInputStream(origem)); 
    byte[] dates = new byte[inFile.available()]; 
    entrada.read(dates); 
    entrada.close(); 
    CMSSignedDataGenerator genetateSign = new CMSSignedDataGenerator(); 
    geradorAss.addSigner(privateKey, certificate, CMSSignedDataGenerator.DIGEST_SHA1); 
    List certList = new ArrayList(); 
    certList.add(certificate); 
    CertStore certs = CertStore.getInstance("Collection", new CollectionCertStoreParameters(certList)); 
    geradorAss.addCertificatesAndCRLs(certs); 
    // Efetivamente assinar os dados de entrada 
    CMSProcessable content = new CMSProcessableByteArray(dates); 
    String providerName; 
    if (ks.getType().equalsIgnoreCase("JKS")) { 
     providerName = BouncyCastleProvider.PROVIDER_NAME; 
    } else { 
     providerName = ks.getProvider().getName(); 
    } 
    CMSSignedData signedDate = genetateSign.generate(content, providerName); 
    signedDate = new CMSSignedData(content, signedDate.getEncoded()); 

    File f = Converter.converter("signedFile.pdf", signedDate.getEncoded()); 

但是,文件F對讀者沒有打開。當我拿到文件f並運行此代碼:

CMSSignedData data = new CMSSignedData(new FileInputStream(f)); 

出現此錯誤:

org.bouncycastle.cms.CMSException: Malformed content. 

有人能幫助我嗎?

總結:

我需要簽署後生成最終文件。例如,我有一個test.pdf文件,我想簽署並生成test_signed.pdf文件。而這個test_signed.pdf文件必須有簽名,並且應該仍然可以在你的閱讀器中閱讀。

我等着......

回答

0

PDF具有文檔內嵌入的簽名,而CMS是簽名本身。從PDF中提取和驗證簽名使用iText庫。這是一個example

相關問題