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 :

Cipher Input/Output Stream


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut Cipher Input/Output Stream
    Salut à tous,

    voilà je voudrais écrire/lire des objets directement en crypté dans un fichier (pas els écrire en clair avec ObjectOuputStream puis tout crypter), et je me suis pour cela dirigé vers CipherOuput/InputStream.

    Mais ça n'écrit pas des objets, bien évidement, ça écrit des bytes. Ma question est comment faire pour les écrire directement en faisant un truc du style out.writeObject(monObjet) pour que ça marche "tout seul".

    Le code suivant par exemple ne fonctionne pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Cipher cipher = Cipher.getInstance("RSA");        
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
     
    CipherOutputStream crypter = new CipherOutputStream(new FileOutputStream(outputFileName), cipher);
    ObjectOutputStream out = new ObjectOutputStream(crypter);
     
    out.writeObject(monObjet);
     
    out.close();
    En fait ça écrit rien dans le fihcier (et évidement ça narrange pas la lecture ;-) ).


    Ma question est donc : comment, de cette manière, arriver à écrire / lire directement des objets en crypté?

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    A priori ton code devrait marcher.

    J'ai testé le code suivant :
    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
    Test t1 = new Test();
    Test t2 = new Test("cinq", 5);
     
    KeyPairGenerator pairgen = KeyPairGenerator.getInstance("RSA");
    SecureRandom random = new SecureRandom();
    pairgen.initialize(2048, random);
    KeyPair keyPair = pairgen.generateKeyPair();
     
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
    CipherOutputStream crypter = new CipherOutputStream(new FileOutputStream("test.ciphered"), cipher);
    ObjectOutputStream out = new ObjectOutputStream(crypter);
    out.writeObject(t1);
    out.writeObject(t2);
    out.close();
     
    cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
    CipherInputStream decrypter = new CipherInputStream(new FileInputStream("test.ciphered"), cipher);
    ObjectInputStream in = new ObjectInputStream(decrypter);
    System.out.println(((Test) in.readObject()).toString());
    System.out.println(((Test) in.readObject()).toString());
    in.close();
    (Rq : exceptions non gérées) avec la classe Test
    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
    public class Test implements Serializable {
        private static final long serialVersionUID = 1L;
     
        private String label;
        private int value;
     
        public Test() {
            this("Test", 0);
        }
        public Test(String label, int value) {
            this.label = label;
            this.value = value;
        }
     
        public String toString() {
            return label + " " + value;
        }
    }
    Et cela marche. J'obtiens bien un fichier crypté, et la sortie standard m'affiche (désérialisation)
    Test 0
    cinq 5
    Peut-être que ton problème vient du type de ton objet à sérialiser ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Ben non ce que j'écris implémente bien Sérializable, aucune exception lancée à l'écriture... Mais j'écris rien dans le fichier...

    Donc à la lecture évidement j'ai une EOF mais c'est pas le problème.

  4. #4
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Strange en effetça ton code fonctionne également chez moi (sans blague lol) mais pas celui de mon application...

    voici le code :

    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
     
    Student std = new Student("Romain","Aa123456", "adress", 20, 
                    new StudyYear(2, "Info", ""));
     
            ManagSys sys = new ManagSys();
     
            sys.addStudent(std);
            try
            {
     
                sys.save("ManagSys.mgsys", "public.key");
            }
            catch (InvalidKeyException ex)
            {
                ex.printStackTrace();
            }
            catch (IOException ex)
            {
                ex.printStackTrace();
            }
            catch (ClassNotFoundException ex)
            {
                ex.printStackTrace();
            }
     
            ManagSys sys2 = ManagSys.load("ManagSys.mgsys", "private.key");
            System.out.println(sys2.getStudents().get(0));

    et le code de sauvegarde :
    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
     
    public void save(String outputFileName, String publicRSAKeyInputFileName) 
            throws IOException, ClassNotFoundException, InvalidKeyException    
        {
            ObjectInputStream keyIn = new ObjectInputStream(
                    new FileInputStream(publicRSAKeyInputFileName));
            Key publicKey = (Key)keyIn.readObject();
            keyIn.close();
     
            Cipher cipher = null;
            try
            {
                cipher = Cipher.getInstance("RSA");
            }
            catch(NoSuchAlgorithmException e)
            {}
            catch(NoSuchPaddingException e)
            {
                e.printStackTrace();
            }
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
     
            CipherOutputStream crypter = new CipherOutputStream(new FileOutputStream(outputFileName), cipher);
            ObjectOutputStream out = null;
            try
            {
                out =new ObjectOutputStream(crypter);
                out.writeObject(students);
                out.writeObject(teachers);
                out.writeObject(secretaries);
                out.writeObject(courses);
                out.writeObject(studyYears);
                out.writeObject(fiches);
            }
            finally
            {
                if(out != null)
                    out.close();
            }
    }

    et voilà, mais ça marche pas...

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Les seules différences avec mon code de test sont :
    • la clé lue dans un fichier
    • le type des données sérialisées
    Il faudrait faire quelques essais pour essayer de localiser plus précisemment la cause du problème.
    • en utilisant une paire de clés générée aléatoirement (cf mon code test).
    • en ne sérialisant qu'un seul attribut à la fois (faire un essai pour students, un pour teachers, etc).
    A priori, les attributs à sérialiser de la classe Managsys semblent être des Lists. Les objets contenus dans ces Lists sont-ils bien Serializables ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    L'utilisation de clés générées aléatoirement n'améliore rien.
    J'ai faut un essaie avec StudyYear, classe ne souffrant d'aucune dépendance avec d'autres classes de ma librairie.
    Je crée donc juste une StudyYear, et je l'écris avec le code que tu utilise, mais le résulatt est le même : un fichier de 0 ko et aucune exception...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusionner 3 fichiers via Input/Output Stream
    Par Mikiya dans le forum Collection et Stream
    Réponses: 21
    Dernier message: 10/03/2011, 09h38
  2. Input-Output Stream et réseau
    Par warseb dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 27/02/2008, 20h36
  3. supprimer un output stream
    Par anasshb dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 25/05/2007, 14h14
  4. erreur input output
    Par kanzarih dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 05/11/2006, 00h40
  5. Problème input/output fichier
    Par nenekes dans le forum Cobol
    Réponses: 3
    Dernier message: 09/09/2006, 22h54

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