Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2953 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Comment Signer une portion d'un fichier XML?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment Signer une portion d'un fichier XML?

n°2061797
ENITIEN
Posté le 08-03-2011 à 11:03:03  profilanswer
 

Bonjour,  
j'ai trouvé ce code qui signe la totalité d'un fichier xml,
je vais savoir comment peut'on procéder pour signer une portion de cet fichier?, c'est à dire des champs exactes. (pas la totalité du fichier).
 
et merci d'avance.

Code :
  1. //les APIs necessaire
  2. import java.io.*;
  3. import java.util.*;
  4. import java.security.*;
  5. import java.security.cert.*;
  6. import org.w3c.dom.*;
  7. import org.xml.sax.*;
  8. import javax.xml.crypto.*;
  9. import javax.xml.crypto.dsig.*;
  10. import javax.xml.crypto.dsig.dom.*;
  11. import javax.xml.crypto.dsig.keyinfo.*;
  12. import javax.xml.crypto.dsig.spec.*;
  13. import javax.xml.crypto.dsig.*;
  14. import javax.xml.parsers.*;
  15. import javax.xml.transform.*;
  16. import javax.xml.transform.dom.*;
  17. import javax.xml.transform.stream.*;
  18. public class Main3{
  19.     public static void main(String args[]) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, KeyStoreException, SAXException, GeneralSecurityException, TransformerException
  20.     {
  21.         Object dom;
  22.         //initiliser les parametres
  23.     XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM" );
  24.     DigestMethod sha1 = factory.newDigestMethod(DigestMethod.SHA1, null);
  25.     CanonicalizationMethod inclusive = factory.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null);
  26.     SignatureMethod rsasha1 = factory.newSignatureMethod(SignatureMethod.RSA_SHA1, null);
  27.     Transform enveloped = factory.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null);
  28.     List transforms = Collections.singletonList(enveloped);
  29.     Reference ref = factory.newReference("",sha1);
  30.     List references = Collections.singletonList(ref);
  31.     SignedInfo signer = factory.newSignedInfo(inclusive, rsasha1, references);
  32.     char[] password = "2[$0wUOS".toCharArray();
  33.     KeyStore store = KeyStore.getInstance("PKCS12" );
  34.         try {
  35.             //lire le fichier de certificat
  36.             InputStream keys = new FileInputStream("personnal_nyal.p12" );
  37.             try {
  38.                 //charger la boutique  
  39.                 store.load(keys, password);
  40.                 System.out.println("Certificat chargé avec succés" );
  41.                
  42.             } catch (NoSuchAlgorithmException ex) {
  43.                 //ex.printStackTrace();
  44.                  System.out.println("Pas d'algorthme ds le certificat" );
  45.             } catch (CertificateException ex) {
  46.                 //ex.printStackTrace();
  47.                 System.out.println("Mot de passe incorrect du certificat" );
  48.             } catch (IOException ex) {
  49.                // ex.printStackTrace();
  50.                  System.out.println("Erreur ds la lecture du certificat" );
  51.             }
  52.         } catch (FileNotFoundException ex) {
  53.            // ex.printStackTrace();
  54.                 System.out.println("fichier spécifié est introuvable" );
  55.         }
  56.    
  57.         try {
  58.                List certs = new ArrayList();
  59.                String alias=getCertificateAliases(store);
  60.                KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry)store.getEntry(alias, new KeyStore.PasswordProtection(password));
  61.                X509Certificate cert = (X509Certificate) entry.getCertificate();
  62.                certs.add(cert.getSubjectX500Principal().getName());
  63.                certs.add(cert); 
  64.                System.out.println("Clé privée recupérée avc succès" );
  65.                System.out.println("X509 opération terminée" );
  66.                KeyInfoFactory keyFactory = factory.getKeyInfoFactory();   
  67.                //cahrger les donnees du certificat
  68.                X509Data data = keyFactory.newX509Data(certs);
  69.                List dataList = Collections.singletonList(data);
  70.                KeyInfo key = keyFactory.newKeyInfo(dataList);
  71.                ////////charger le fichier Xml
  72.                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  73.                DocumentBuilder db;
  74.      
  75.             try {
  76.                 db = dbf.newDocumentBuilder();
  77.                 try {
  78.                     //charger le fichier xml à signer
  79.                     Document doc=db.parse("personnes.xml" );
  80.                     Node node=doc.getFirstChild();
  81.                     Object nabil =db.getSchema() ;
  82.                    // Node node2=doc.appendChild(doc);
  83.                     //creer le context de la signature
  84.                     DOMSignContext context = new DOMSignContext(entry.getPrivateKey(),node);
  85.                     XMLSignature signature = factory.newXMLSignature(signer, key);
  86.                     try {
  87.                         signature.sign(context); 
  88.                          TransformerFactory tf = TransformerFactory.newInstance();
  89.                          Transformer trans = tf.newTransformer();
  90.                          trans.transform(new DOMSource(doc),new StreamResult(new FileOutputStream("mySignedFile.xml" )));
  91.                          System.out.println(""+doc.getDocumentURI()+ "           bien signé" );
  92.                        
  93.                     } catch (MarshalException ex) {                     
  94.                         System.out.println("Erreur ds la signature (Marshal)" );
  95.                     } catch (XMLSignatureException ex) { 
  96.                         System.out.println("Erreur ds la signature" );
  97.                        
  98.                     } 
  99.                     try {
  100.                         signature.sign(context);
  101.                     } catch (XMLSignatureException ex) {
  102.                         ex.printStackTrace();
  103.                     } catch (MarshalException ex) {
  104.                         ex.printStackTrace();
  105.                     }
  106.                 } catch (IOException ex) {
  107.                     //ex.printStackTrace();
  108.                     System.out.println("Fichier XMl pas trouvée" );
  109.                 } catch (SAXException ex) {
  110.                     //ex.printStackTrace();
  111.                     System.out.println("Erreur ds le parseur XML" );
  112.                 }
  113.             } catch (ParserConfigurationException ex) {
  114.                 ex.printStackTrace();
  115.             }                   
  116.         } catch (UnrecoverableEntryException ex) {
  117.             ex.printStackTrace();
  118.         } catch (KeyStoreException ex) {
  119.             ex.printStackTrace();
  120.         } catch (NoSuchAlgorithmException ex) {
  121.             ex.printStackTrace();
  122.         }
  123.     }
  124.  
  125.     public static String getCertificateAliases(KeyStore akeyStore) throws GeneralSecurityException
  126.     {
  127.           Enumeration aliasesEnum = akeyStore.aliases();
  128.              List certs = new ArrayList();
  129.             while(aliasesEnum.hasMoreElements())
  130.             {
  131.                String alias = (String)aliasesEnum.nextElement();
  132.               return alias;
  133.             }
  134.              return null;//retourne null si aucun aléas n'a été trouvé
  135.     }   
  136. }

mood
Publicité
Posté le 08-03-2011 à 11:03:03  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Comment Signer une portion d'un fichier XML?

 

Sujets relatifs
Parser une XML à partir d'une DTDCoder en assembleur deux fichier .bin help
Mettre résultat d'un fichier php externe dans une variableImpossible de copier un fichier avec FileSystemObject
[Batch] Trouver le dossier d'un fichierafficher un fichier texte dans un tableau avec android
[VBA] Dernière ligne vide dans un fichier excel videAfficher la structure fichiers et dossier en XML (php)
[résolu] Exec() dans un fichier batchDécoupez un fichier xml
Plus de sujets relatifs à : Comment Signer une portion d'un fichier XML?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR