ho una classe che dovrebbe criptare un file..
problema è che quando la eseguo mi da un errore..
cercando in rete ho scoperto che è dovuto al file di policy contenuto nel jar..
ho un modo per aggirarlo ?
contando che il programma dovrà essere intallato sui clienti, non posso interagire sulla jre di ciascuno..
non esiste un modo per specificare qualcosa da progetto ?
codice:import java.io.*; import java.util.*; import java.security.*; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import org.bouncycastle.cms.CMSEnvelopedData; import org.bouncycastle.cms.CMSException; import org.bouncycastle.cms.CMSProcessableByteArray; import org.bouncycastle.cms.CMSEnvelopedDataGenerator; import org.bouncycastle.cms.KeyTransRecipientInformation; import org.bouncycastle.jce.provider.BouncyCastleProvider; public class Test4 { /** * @param args */ public static void main(String[] args) { String pathFile = "prove/x509NOPPR8002_20090401.zip.p7m"; String pathCert = "prove/concentratore.cer"; //Plug the Provider into the JCA/JCE Security.addProvider(new BouncyCastleProvider()); FileInputStream freader = null; File f = null; X509Certificate cert = null; //------ Get the content data from file ------------- f = new File(pathFile) ; int sizecontent = ((int) f.length()); byte[] contentbytes = new byte[sizecontent]; try { freader = new FileInputStream(f); System.out.println("\nContent Bytes: " + freader.read(contentbytes, 0, sizecontent)); freader.close(); } catch(IOException ioe) { System.out.println(ioe.toString()); return; } //------ Get recipient certificate from file ------------- try{ InputStream inStream = new FileInputStream(pathCert); CertificateFactory cf = CertificateFactory.getInstance("X509"); cert = (X509Certificate)cf.generateCertificate(inStream); inStream.close(); String[] infos_emetteur = cert.getIssuerDN().getName().split("(=|, )", -1); String[] infos_titulaire = cert.getSubjectDN().getName().split("(=|, )", -1); System.out.println("CommonName : " + infos_titulaire[3]); System.out.println("EmailAdresse : " + infos_titulaire[1] + "\n"); for (int i = 0; i < infos_emetteur.length; i += 2) { if (infos_emetteur[i].equals("C")) System.out.println("CountryName : " + infos_emetteur[i + 1]); if (infos_emetteur[i].equals("O")) System.out.println("OrganizationName : " + infos_emetteur[i + 1]); if (infos_emetteur[i].equals("CN")) System.out.println("CommonName : " + infos_emetteur[i + 1]); } System.out.println("valido"); System.out.println("dal : " + cert.getNotBefore()); System.out.println("al : " + cert.getNotAfter()); } catch(Exception exc){ System.out.println("Couldn't instantiate X.509 certificate"); return; } // --- Use Bouncy Castle provider to create enveloped message --- String algorithm = CMSEnvelopedDataGenerator.DES_EDE3_CBC; int keysize = 192; // bits CMSEnvelopedDataGenerator fact = new CMSEnvelopedDataGenerator(); fact.addKeyTransRecipient((X509Certificate)cert); CMSProcessableByteArray content = new CMSProcessableByteArray(contentbytes); try{ CMSEnvelopedData envdata = fact.generate(content, algorithm, keysize, "BC"); byte[] enveloped = envdata.getEncoded() ; System.out.println("Got encoded pkcs7 bytes " + enveloped.length + " bytes") ; FileOutputStream envfos = new FileOutputStream("BCenveloped.p7"); envfos.write(enveloped); envfos.close(); } catch(CMSException ex){ System.out.println(ex.getUnderlyingException()); ex.printStackTrace(); } catch (IOException e) { System.out.println("COuldn't generate enveloped signature") ; } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }


Rispondi quotando