begin process at 2010 02 10 05:11:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Java

 > 

Archives

 > 

Au secours

 > 

Demande d'aide sur conception et dévelloppement projet Java


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Demande d'aide sur conception et dévelloppement projet Java

samedi 25 mars 2006 à 13:54:14 | Demande d'aide sur conception et dévelloppement projet Java

comeochris

Membre Club

Bonjour,

Je suis étudiant (bac+2) et je finis mon stage de 2 mois dans 2 semaines. Je suis trop à labour.....Je panique et je m'embrouille.... J'ai besoin d'aide
Le but de mon projet est de comparer les temps d'exécution du hash d'un fichier passé en paramètre en fonction des différents providers disponibles sur le marché (JCA, BoucyCastle, IAIK et Openssl).
Les réultats ainsi obtenus sont à insérer dans une base de donnée (ça je ne l'est pas encore fait... )
Je demande de l'aide pour finaliser mon code :
- séparer l'interface graphique de la crypto (un petit framework ?)
- développer une classe qui permette l'insertion des résultats dans une base de donnée mysql

Si en plus il y avait conception UML, ce serait super.

Suis prêt à dédommager largement la personne qui se penchera sur mon sujet et me fournira un projet finalisé. (Contactez-moi en message privé pour plus de renseignaments, notamment pour que je vous passe les bibliothèques Bouncycastle et IAIK que j'utilise ainsi qu'Openssl.).

Mon mail : comeochris@hotmail.com

#################################################################

Ci-dessous mon code :

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

import java.security.*;
import iaik.security.provider.IAIK;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class Test
{
 public static void main(String[] args)
 {
  // Ajoute le provider BouncyCastle
        Security.addProvider(new BouncyCastleProvider());
        // Ajoute le provider IAIK
        Security.addProvider(new IAIK());
       
        // Crée un obet MessageDigestFrame (cf classe MessgeDigestFrame extends JFrame)
  JFrame frame = new MessageDigestFrame();
  frame.setVisible(true); // Rends la Frame visible
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Quitte le logiciel lorsqu'on ferme la JFrame
 }
}

class MessageDigestFrame extends JFrame
{
 private MessageDigest md;
 private JTextArea message = new JTextArea(); // Multiligne
 private byte [] hash;
 static final long serialVersionUID = 00001;
 
 public MessageDigestFrame()
 {
  this.setTitle ("Test Hash"); //Titre de la JFrame
  this.setSize (500,300); //Taille de la JFrame
  
  // Création de la zone de choix (boutons radios)
  JPanel panel = new JPanel (); //1er panel
  JPanel panel2 = new JPanel (); //2ème panel
  
  ButtonGroup group = new ButtonGroup(); // Sert à contenir plusieurs boutons.Un et un seul de ses boutons sera sélectionné simultanément.
  // Définitions des 4 boutons permettant à l'utilisateur de choisir le provider qu'il souhaite utiliser pour le test
  this.addRadioButton (panel, "JCA", group);
  this.addRadioButton (panel, "BC", group);
  this.addRadioButton (panel, "IAIK", group);
  this.addRadioButton (panel, "OpenSSL", group);
  // Définition du bouton servant à choisir le fichier à hacher
  this.addFileButton (panel2, "Choix du Fichier");
 
  // Composition graphique
  this.getContentPane().add(panel, BorderLayout.NORTH); // En haut, les boutons
  this.getContentPane().add(new JScrollPane(message), BorderLayout.CENTER); // Au centre, le résultat
  this.getContentPane().add(panel2, BorderLayout.SOUTH); // En bas, le bouton de choix du fichier
  message.setFont(new Font ("Monospaced", Font.PLAIN,12)); // Affichage personnalisé de l'empreinte

  setProvider("JCA");
 }
 
 /**
    Ajouter un bouton dans un groupe de boutons permettant de choisir le provider
    @param c est le container dans lequel on va placer le bouton
    @param name est le nom du provider
    @param g est le groupe de bouton
    */
 public void addRadioButton(Container c, final String name,  ButtonGroup g)
 {
  ActionListener listener = new ActionListener() // Ajout d'un évenement
  { 
   public void actionPerformed(ActionEvent event) //Action de l'événément (clic sur le bouton radio)
   {
    setProvider(name); //Mets à jour le provider à utiliser dans le programme
   }
  };
  // Crée un bouton radio (le premier bouton créé sera celui qui sera coché)
  JRadioButton RadioButton = new JRadioButton(name, g.getButtonCount() == 0);
  c.add(RadioButton); // Ajoute le bouton au container (panel)
  g.add(RadioButton); // Ajoute le bouton au groupe (group)
  RadioButton.addActionListener(listener); // Ajoute l'événement "listener" au bouton
 }
 /**
    Ajouter un bouton permettant de choisir le fichier à hacher
    @param c est le container dans lequel on va placer le bouton
    @param name est le nom du bouton

    */
 public void addFileButton(Container c, final String name)
 {
  ActionListener listener = new ActionListener() // Ajout d'un évenement
  { 
   public void actionPerformed(ActionEvent event) //Action de l'événément (clic sur le bouton)
   {
    // Création d'un nouveau filechosser
    JFileChooser chooser = new JFileChooser();
    // Définition du répertoire sur lequel va se positionner le filechooser
    chooser.setCurrentDirectory(new File("D:\\File"));
    // Initialise le bouton de confirmation (ApproveButton)
    chooser.setApproveButtonText("Calcul le hash");
    // affiche la boite de dialogue
    int r = chooser.showOpenDialog(null);
    if (r == JFileChooser.APPROVE_OPTION) // si un fichier est selectionné,
          {
     try
     {
      // Récupère le nom du fichier puis son path
      String name = chooser.getSelectedFile().getAbsolutePath();
               long result = repeatDigest(10000,name);
               message.setText("Provider utilisé : " + md.getProvider().toString() + "\nFichier à Hacher : " + chooser.getSelectedFile().getAbsolutePath() + "\nTemps d'exécution de 10000 hasch de ce fichier : " +result + "\nValeur du dernier hash traité : " + displayDigest(hash));
     }
     catch (IOException e)
     {
      JOptionPane.showMessageDialog(null,e);
     }
          }
   }
  };
  // Crée un bouton
  JButton FileButton = new JButton(name);
  c.add(FileButton); // Ajoute le bouton au container (panel)
  FileButton.addActionListener(listener); // Ajoute l'événement "listener" au bouton
 }

 /**
    Fonction permettant de mettre à jour le provider qui sera utilisé dans le calcul du hash
    @param prov Le provider choisi
    */
 public void setProvider(String prov)
 {
  try
  {
   if (prov=="JCA")
   {
    md = MessageDigest.getInstance("SHA-1");//JCA
   }
   else
   {
    if (prov!="OpenSSL")
    {
     md = MessageDigest.getInstance("SHA-1",prov); //BouncyCasle et IAIK
    }
    else
    {
     md = null; //OpenSSL
    }
   }
   message.setText(""); //Initialise la zone de texte
  }
  catch (NoSuchAlgorithmException e) // Gestion Exception NoSuchAlgorithmException
  {
   message.setText("L'alghorithme de hash SHA-1 est inconnu.");
  }
  catch (NoSuchProviderException e) // Gestion Exception NoSuchProviderException
  {
   message.setText("Le provider "+ prov + " est introuvable.");
  }
 }
 /**
    Fonction permettant de charger dans un buffer les bytes d'un fichier
    @param name Le nom du fichier (son chemin absolu)
    @return un tableau de bytes
 */
 public byte[] loadBytes(String name) throws IOException
 {
  // Ouvre un flux vers le fichier passé en paramètre de la fonction
  RandomAccessFile raf = new RandomAccessFile(name, "r");
  try
  {
            // Tableau d' octets servant à stocker les valeurs de la séquence d'octets composant le fichier
            byte[] buffer = new byte[(int)raf.length()];
            raf.readFully(buffer); // lit chaque octet de "raf" et stocke les dans le tableau d'octets "buffer"
            return buffer; //Retourne le tableaux d'octets composant le fichier passer en paramètre de cette fonction
  }
  finally // Dans tous les cas ferme le flux
  {
   raf.close();
  }
 }
 /**
    Fonction permettant de calculer le messagedigest à partir d'un tableau de bytes
    @param b Le tableau de bytes servant au calcul
    */
 public byte[] computeDigest(byte[] b)
 {
  md.reset(); //Réinitialise l'objet
  md.update(b); //On donne le tableau de bytes servant à faire le digest
  // Calcul le hash à partir du tableau de bytes et place le résultat dans un autre tableau de bytes
  hash = md.digest(); //Mémorise le hash pour pouvoir l'afficher plus tard
  return hash;
 }
 /**
    Fonction permettant de calculer le messagedigest 'OpenSSL' à partir du nom du fichier à hacher
    @param name Le nom du fichier à hacher
    */
 public byte[] computeOpensslDigest(String name)throws IOException
 {
  Process p = Runtime.getRuntime().exec("C:\\Openssl\\Bin\\openssl dgst -sha1 -binary " + name);
  // Ouvre un flux vers le fichier passé en paramètre de la fonction
  InputStream in = new BufferedInputStream(p.getInputStream());
  try
  {
   // Tableau de 20 octets permettant de stocker les 20 octets du hash
            byte [] buffer = new byte [20];
            in.read(buffer);// lit chaque octet de "in" et stocke les dans le tableau d'octets "buffer"
            hash = buffer; //Mémorise le hash pour pouvoir l'afficher plus tard
   return buffer; //Retourne le tableau de byte ainsi obtenu
  }
  finally // Dans tous les cas ferme le flux
  {
   in.close();
  }
 }
 /**
    Fonction permettant de répéter x fois le hash du fichier sélectionné
    @param nbOfRep Le nombre de hash à traiter
    @param name Le nom du fichier à hacher
    */
 public long repeatDigest (int nbOfRep, String name) throws IOException
 {
        long t_depart = System.currentTimeMillis(); // Heure courante (ms)
        // Boucle servant à calculer le temps d'exécution de 'nbOfRep' traitements
        for (int cpt=0;cpt<nbOfRep;cpt++)
        {
         // Si md==null alors calcule le hash via openssl sinon extrais les bytes du fichier et calcules le hash
         if (md == null){computeOpensslDigest(name);}
         else {computeDigest(loadBytes(name));}
        }
       
        return System.currentTimeMillis() - t_depart; //Temps d'exécution de 'nbOfRep' traitements
        }
 /**
    Fonction permettant de transformer un tableau de bytes sous forme hexadécimale
    @param b Le tableau de bytes à transformer en hexa
    */
 public String displayDigest(byte[] b)
 {
  String d = "";
  for (int i = 0; i < b.length; i++)
  {
   int v = b[i] & 0xFF;
   if (v < 16) d += "0";
   d += Integer.toString(v, 16).toUpperCase() + " ";
  }
  return d;
 }


}

samedi 25 mars 2006 à 15:26:26 | Re : Demande d'aide sur conception et dévelloppement projet Java

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
N'espère pas trop à trouver quelqu'un qui viendras t'aider : notre but n'est pas de développer un prog (ou même un bout de prog) pour que vous vous fassiez des sous sur notre dos (qui nous dit que tu es bien en stage, et non que tu ne va pas vendre ce qu'on te fera bien cher ?), mais répondre à des problèmes de prog précis, ou à des questions bien précises.

_
Avant de poster dans le forum,
prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx
samedi 25 mars 2006 à 15:28:58 | Re : Demande d'aide sur conception et dévelloppement projet Java

comeochris

Membre Club
Je comprends.
Puis-je alors vous demander un devis ?

Christophe
samedi 25 mars 2006 à 15:57:55 | Re : Demande d'aide sur conception et dévelloppement projet Java

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
mais c'est pas le principe d'être payé ou pas qui pose problème : tu es sur un forum d'entraide à la programmation ici, pas sur un site ou on demande aux autres de travailler pour toi.

Poses des questions précises sur les problèmes que tu rencontre, et on te répondra, mais ne vient pas ici en disant : "voilà où j'en suis, maintenant, j'arrive plus à progresser, alors finissez le travail pour moi".

Nous sommes là pour t'aider dans tes développements, pas te les terminer.

_
Avant de poster dans le forum,
prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx
samedi 25 mars 2006 à 17:14:15 | Re : Demande d'aide sur conception et dévelloppement projet Java

comeochris

Membre Club

Ok, c'est que j'avais vu qu'il y avait une rubrique qui permettait de demander un devis : Contact -> demande de prestation (devis) et je souhaitais donc savoir si je pouvais demander un devis pour le type de prestation que j'évoque plus haut : en fait, plus clairement, et comme tu l'as si bien dit, c'est terminer mon boulot ...

Peut-être dois-je donc leur écrire ?

Christophe

samedi 25 mars 2006 à 17:44:56 | Re : Demande d'aide sur conception et dévelloppement projet Java

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Lol, ca n'a rien à voir avec ce que tu demande :

La demande de devis part directement chez nix (il me semble) pour demander combien peut coûter un partenariat entre codes sources et un autre site, ou pour poster une pub.

_
Avant de poster dans le forum,
prière d'aller lire ceci :
http://www.codes-sources.com/reglement.aspx


Cette discussion est classée dans : fichier, bouton, public, name, hash


Répondre à ce message

Sujets en rapport avec ce message

recuperer contenu de balise xml avec sax [ par lolofx ] salut, voila, je voudrais recuprer le contenu d'une balise xml choisi voila la sourcepour info nom correspond au nom de la balisefichier au nom du fic Bug introuvable [ par Bouki ] Salut,Voilà g un pb avec ce code (3fichiers) que je ne comprend pas et que je n'arrive pas à résoudre.Si quelqu'un peut m'aider...Fichier Ecouteur.jav Intégrer une image créée à un panel [ par Elisa23 ] Bonjour à tous !Je voudrais avoir sur la même page un texte qui défile et un bouton...J'y arrive presque, mais le texte et le bouton se superposent au Interface graphique - Problèmes d'affichage [ par Kanouch ] Bonjour,j'essaie de réaliser l'interface graphique d'une fenêtre d'acceuil d'un logiciel ressemblant à MSN, AIM... Cette fenêtre contient une Box et u Problem pour faire un fichier .class [ par smitchel ] bon jour j'ai ce code et je voudrai faire un fichier .class mais je sai pas comment mais jeve aussi pouvoir modifier mon "SERVER_DEFAULT_PORT " pour p mon fond cache mes bouton qui s'affcihe bizarement [ par niko29940242 ] bonjour a tousje crois que j'aurai du poster dans la categorie "au secours" mais tan pimon pb c'est que une classe extends Jframe qui a une image de f aide pour affichage [ par copin ] Salut! Je suis entrian de devellopper un prog de blackjack en java et j'ai un petit probleme pour joindre deux codes en un! Ce que je veux faire c'est pb a la compilation [ par fatcat ] salut a tousVoila mon petit pb j ai codé le jeu du morpion et quand je lance la compilation j ai cette erreur:is not abstract and does not override ab Sauvegarde et Serialisation [ par lafoune2 ] j'utilise unJFileChooser pour recuperer un fichier que j'ai enregistré mais y'a un truc que j'arrive pas a saisir : java.io.WriteAbortedException: wr message d'erreur qui vient de je ne sais ou !!! [ par niko29940242 ] salut all j'ai une classe qui est censé faire apparaitre une fenetre d'information a l'aide de JFrame et de ActioListener , le probleme est que j'ai t


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales