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

Sécurité Java Discussion :

AES 256 Bits


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Par défaut AES 256 Bits
    Bonjour à tous,

    Je dois créer un programme permettant de crypter une chaîne de caractères en utilisant l'algorithme AES sur 256 bits.

    J'ai trouvé un code source sur le site de Sun (pour un encodage sur 128 bits) mais je ne parviens pas à l'utiliser avec un encodage de 256 bits.

    http://java.sun.com/developer/techni...ES/AES_v1.html

    J'ai suivi les instructions de Sun en installant les bibliothèques : Strong Versus Unlimited Strength Cryptography, mais je ne suis pas sûr qu'elles soient bien prises en compte dans mon programme.

    Malgré les 2 discussions déjà disponibles sur ce forum, je ne parviens pas à réaliser mon programme Java.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     import java.security.*;
     import javax.crypto.*;
     import javax.crypto.spec.*;
     import java.io.*;
     
     /**
     * This program generates a AES key, retrieves its raw bytes, and
     * then reinstantiates a AES key from the key bytes.
     * The reinstantiated key is used to initialize a AES cipher for
     * encryption and decryption.
     */
     
     public class AES {
     
       /**
       * Turns array of bytes into string
       *
       * @param buf Array of bytes to convert to hex string
       * @return    Generated hex string
       */
       public static String asHex (byte buf[]) {
        StringBuffer strbuf = new StringBuffer(buf.length * 2);
        int i;
     
        for (i = 0; i < buf.length; i++) {
         if (((int) buf[i] & 0xff) < 0x10)
        strbuf.append("0");
     
         strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
        }
     
        return strbuf.toString();
       }
     
       public static void main(String[] args) throws Exception {
     
         String message="This is just an example";
     
         // Get the KeyGenerator
     
         //KeyGenerator kgen = KeyGenerator.getInstance("AES");
         //kgen.init(256); // 192 and 256 bits may not be available
     
     
         // Generate the secret key specs.
         	// SecretKey skey = kgen.generateKey();
         	// byte[] raw = skey.getEncoded();
     
    			byte[] raw = "12365478965214211452442145145214".getBytes();
    			SecretKey skeySpec = new SecretKeySpec(raw, "AES");
     
     
         // Instantiate the cipher
     
         Cipher cipher = Cipher.getInstance("AES");
     
         cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
     
         byte[] encrypted =
           cipher.doFinal((args.length == 0 ?
            "This is just an example" : args[0]).getBytes());
         System.out.println("encrypted string: " + asHex(encrypted));
     
         cipher.init(Cipher.DECRYPT_MODE, skeySpec);
         byte[] original =
           cipher.doFinal(encrypted);
         String originalString = new String(original);
         System.out.println("Original string: " +
           originalString + " " + asHex(original));
       }
     }
    J'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exception in thread "main" java.security.InvalidKeyException: Illegal key size or default parameters
            at javax.crypto.Cipher.a(DashoA12275)
            at javax.crypto.Cipher.a(DashoA12275)
            at javax.crypto.Cipher.a(DashoA12275)
            at javax.crypto.Cipher.init(DashoA12275)
            at javax.crypto.Cipher.init(DashoA12275)
            at AES.main(AES.java:57)
    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    comment avez vous installé cette extension? avez vous bien tout mis au bon endroit? Êtes vous sur de ne pas avoir plusieurs JVM installé et d'utiliser une jvm où vous n'avez pas mis l'extension?

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    comment avez vous installé cette extension? avez vous bien tout mis au bon endroit? Êtes vous sur de ne pas avoir plusieurs JVM installé et d'utiliser une jvm où vous n'avez pas mis l'extension?
    J'ai copié les fichiers jar dans le répertoire .\lib\security de mon répertoire Java.

    J'ai plusieurs versions de jvm sur ma machine, mais j'utilise bien la bonne version (vérifié avec java -version et la variable d'environnement %PATH%).

    Même, si je suis pas sûr que cela ça soit nécessaire, j'ai ajouté le répertoire security dans la variables %CLASSPATH%, ainsi que les fichiers jar directement.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Vous ne devriez pas modifier classpath.
    Assurez vous aussi que vous n'avez pas mis les jar dans le jdk plutot que le jre.
    Eventuellement, afficher
    Cipher.class.getProtectionDomain().getCodeSource().getLocation() pour être sur que tout colle

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Vous ne devriez pas modifier classpath.
    Assurez vous aussi que vous n'avez pas mis les jar dans le jdk plutot que le jre.
    Eventuellement, afficher
    Cipher.class.getProtectionDomain().getCodeSource().getLocation() pour être sur que tout colle
    Il doit y avoir quelque chose, que je fais mal

    Pour ne pas modifier le CLASSPATH, j'ai donc copié les fichiers jar dans mon répertoire de travail et j'ai ajouté le classpath lors de la compilation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    D:\Appli\Java\jdk\bin\javac -cp D:\Temp\AES\;D:\Temp\AES\Extension\local_policy.jar;D:\Temp\AES\Extension\US_export_policy.jar D:\Temp\AES\AES.java
    D:\Temp\AES : Répertoire de mon code source Java et de mma class
    D:\Temp\AES\Extension : Répertoire des fichier local_policy.jar et US_export_policy.jar

    Au niveau de l'exécution, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    D:\Appli\Java\jdk\bin\java -cp D:\Temp\AES\;D:\Temp\AES\Extension\local_policy.jar;D:\Temp\AES\Extension\US_export_policy.jar AES
    Le retour de l'extension est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exception in thread "main" java.security.InvalidKeyException: Illegal key size or default parameters
            at javax.crypto.Cipher.a(DashoA12275)
            at javax.crypto.Cipher.a(DashoA12275)
            at javax.crypto.Cipher.a(DashoA12275)
            at javax.crypto.Cipher.init(DashoA12275)
            at javax.crypto.Cipher.init(DashoA12275)
            at AES.main(AES.java:60)
    En ajoutant ceci dans le code source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    System.out.println("-- TEST --");
    System.out.println(Cipher.class.getProtectionDomain().getCodeSource().getLocation());
    Le programme me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    -- TEST --
    Exception in thread "main" java.lang.NullPointerException
            at AES.main(AES.java:50)

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    par "pas de modification de CLASSPATH" je voulais dire que ca doit marcher en mettant les jar dans le répertoire de la jre. Rien ne sert de les mettre avec -cp ou classpath puisqu'ils sont chargé avant le classpath. L'emplacement normal est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <java-home>\lib\security\*.jar
    attention que sous windows ca peut être tordu, le plus simple est de s'assurer qu'on les a mis dans toutes les jre sous windows. Ou alors d'appeler explicitement la jre où c'est installé sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <java-home>\bin\java monProgramme.jar

Discussions similaires

  1. Decryptage AES 256 avec Mot de passe
    Par Lekno dans le forum Sécurité
    Réponses: 1
    Dernier message: 29/05/2013, 11h17
  2. Generer Key AES 256 bit pour encrypter 128 zéros
    Par JacK_soN dans le forum Sécurité
    Réponses: 2
    Dernier message: 05/12/2008, 20h38
  3. IIS & SSL : forcer le cryptage à 256 bits
    Par hm1ch dans le forum IIS
    Réponses: 1
    Dernier message: 09/09/2007, 17h22
  4. AES 128 bits
    Par bibi-C-Moi dans le forum VHDL
    Réponses: 3
    Dernier message: 31/07/2007, 08h25
  5. AES 128 bits
    Par bibi-C-Moi dans le forum Composants
    Réponses: 3
    Dernier message: 31/07/2007, 08h25

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