IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Lecture d'une clé privée (ElGamalPrivateKey) depuis un fichier


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Lecture d'une clé privée (ElGamalPrivateKey) depuis un fichier
    bonsoir. Je cherche à recupérer la clé privée elgamalprivateKey d'un fichier . le prblm c'est qu'à chaque fois que je fais la lecture du fichier il m'affiche une valeur. on dirait qu'il genère chaque fois une nouvelle clé. avez vous une idée?
    Voici mon code:
    public static void GenCles()throws Exception, NoSuchAlgorithmException, NoSuchProviderException

    {

    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

    byte[] input = "ab".getBytes();
    Cipher cipher = Cipher.getInstance("ElGamal/None/NoPadding", "BC");
    KeyPairGenerator generator = KeyPairGenerator.getInstance("ElGamal", "BC");
    SecureRandom random = new SecureRandom();
    generator.initialize(256, random);

    KeyPair pair = generator.generateKeyPair();
    pubKey = (ElGamalPublicKey) pair.getPublic();
    privKey = (ElGamalPrivateKey) pair.getPrivate();
    System.out.println("pub : "+pubKey);
    System.out.println("priv: "+privKey);
    enregistrer_pub(pubKey);
    enregistrer_priv(privKey);
    lecture();
    }
    /////methode enregistrer_priv
    public static void enregistrer_priv(ElGamalPrivateKey chaine2) throws FileNotFoundException, IOException
    {
    String monFichier="C:\\Users\\user\\Desktop\\private.txt";

    FileOutputStream fout = new FileOutputStream(monFichier);
    ObjectOutputStream oos = new ObjectOutputStream(fout);
    oos.writeObject(chaine2);
    oos.close();
    System.out.println("private key enregistree: "+ chaine2);
    }

    ///methode enregistrer_pub
    public static void enregistrer_pub(ElGamalPublicKey chaine) throws FileNotFoundException, IOException
    {

    String monFichier="C:\\Users\\user\\Desktop\\public.key";
    FileOutputStream fout = new FileOutputStream(monFichier);
    ObjectOutputStream oos = new ObjectOutputStream(fout);
    oos.writeObject(chaine);
    oos.close();
    System.out.println("public key enregistree: "+ chaine);
    }
    ///methode lecture
    public static void lecture() throws FileNotFoundException, IOException, ClassNotFoundException{
    String fichier2 = "C:\\Users\\user\\Desktop\\private.txt";
    FileInputStream fis = new FileInputStream(fichier2);
    ObjectInputStream ois = new ObjectInputStream(fis);
    ElGamalPrivateKey priv = (ElGamalPrivateKey) (ois.readObject());
    System.out.println("priv key par lecture: " + priv);
    ois.close();
    }

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    Tu affiches le résultat de la méthode toString() cela n'afficherait pas un truc du genre :
    org.bouncycastle.jce.provider.JCEElGamalPrivateKey@012345
    ?

    Si c'est le cas rien à voir avec la valeur de la clé, il s'agit seulement de "l'adresse" de ton instance.

    Le meilleur moyen de vérifier c'est de :
    1. crypter une donnée avec les clés générées
    2. sauvegarder les clés générées
    3. charger les clés sauvegardées
    4. décrypter avec les clé chargées
    5. comparer la donnée en entrée avec ce qui a été décrypté

    Tu peux également faire de même en cryptant une donnée avec les clés chargées et en décryptant avec les clés générées.

    En général on utilise un key-store pour stocker des clés.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    ui en fait si je decrypte avec la clé privée lue du fichier ça marche, j'ai trouvé la source du prblm: en fait g un client qui envoie le msg crypté; et quand le serveur reçoit ce msg il le lit comme un string je fait "chaine.getbyte() pr recupérer le byte reçu ensuite je decrypte et à ce moment la ça bloque. donc il a un prblm à lire le byte.
    Avez vous une idée comment je fais la conversion de String en byte[] ? sinon comment je fais lire mon serveur un byte [] directement?

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    La conversion String <-> byte[] sans spécifier l'encodage est à proscrire.

    Je ferais un truc du genre
    1. Alice : Générer le message à envoyer sous forme de String
    2. Alice : Initialiser un DataOutputStream avec un ByteArrayOutputStream, pour chaque "char" dans la String, écrire l'entier correspondant dans le DataOutputStream.
    3. Alice : Générer le tableau de byte correspondant au ByteArrayOutputStream
    4. Alice : Crypter le tableau de byte
    5. Alice : Envoyer les données cryptées
    6. Bob : Réceptionner les données cryptées
    7. Bob : Décrypter les données
    8. Bob : Encapsuler les données décryptées dans un ByteArrayInputStream
    9. Bob : Encapsuler le ByteArrayInputStream dans un DataInputStream
    10. Bob : Pour chaque entier dans le flux, le caster en "char" et l'ajouter dans un StringBuilder pour reconstruire le message
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    d'accord jvais essayer de cette manière, mais le prblm c'est que pr l'etape 6:Bob : Réceptionner les données cryptées ; il faudra avoir une valeur byte[] pr decrypter; voici ma methode de decryptage:

    public static byte[] Cryptage(byte[] input) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, FileNotFoundException, IOException, ClassNotFoundException, InvalidAlgorithmParameterException {

    ArrayList list = new ArrayList();
    list = lecture();
    ElGamalPublicKey pubKey = (ElGamalPublicKey) list.get(0);
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    Cipher cipher = Cipher.getInstance("ElGamal/None/NoPadding", "BC");
    cipher.init(Cipher.ENCRYPT_MODE, pubKey);

    byte[] cipherText = cipher.doFinal(input);
    //
    System.out.println("cipher: " + cipherText);
    return cipherText;
    }

  6. #6
    Futur Membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    en plus j'utilise une connexion tcp et UDP

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/01/2014, 09h48
  2. Lecture d'une clé privée avec J2ME
    Par athar dans le forum Développement Mobile en Java
    Réponses: 0
    Dernier message: 18/06/2010, 14h17
  3. [AC-97] Lecture d'une base access réseau depuis wm6.5
    Par docjo dans le forum Access
    Réponses: 1
    Dernier message: 31/05/2010, 19h24
  4. Réponses: 0
    Dernier message: 15/07/2009, 16h23
  5. Réponses: 8
    Dernier message: 26/04/2008, 13h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo