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 :

Encodage / Decodage :: Cle RSA


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 86
    Par défaut Encodage / Decodage :: Cle RSA
    Bonjour à tous,

    J'ai actuellement comme mandat d'encrypter et décrypter des données d'un formulaire.

    Je n'ai jamais eu à faire ce type de travail donc je suis un peu embêté.

    Je n'ai pas de ressource autour de moi me permettant de m'orienter.

    Je me suis fait remettre 3 fichiers.

    un fichier .CRT illisible.
    Un fichier .CRT lisible qui contient des informations sur le certificat etc..
    et un fichier .key qui contient à ce qui semble a la private key.

    Je sais que c'est une cle RSA de 1024 bits.


    En regardant ici et la , j'ai trouvé un tutoriel qui semblait faire ce que je voulais faire.

    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
     
        public void Encryption(){ //C:\\MyFile.txt
            File keyFile = new File("C:\\cipher\\public.crt");
            byte[] encodedKey = new byte[(int) keyFile.length()];
            try{
                new FileInputStream(keyFile).read(encodedKey);
                X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedKey);
                KeyFactory kf = KeyFactory.getInstance("RSA");
                // TEST
     
                PublicKey pk = kf.generatePublic(publicKeySpec);
                //
                Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
                cipher.init(Cipher.ENCRYPT_MODE, pk);
                byte[] cypherText = cipher.doFinal("Hello the world".getBytes("UTF8"));
     
                System.out.println("Cryptés");
                System.out.println(cypherText);
     
                //
     
                keyFile = new File("C:\\cipher\\privee.key");
                encodedKey = new byte[(int) keyFile.length()];
                new FileInputStream(keyFile).read(encodedKey);
                PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(encodedKey);
     
                PrivateKey privateKey = (RSAPrivateKey)kf.generatePrivate(privateKeySpec);
                cipher.init(Cipher.DECRYPT_MODE,privateKey);
     
                System.out.println("decrypté");
                System.out.println(cipher.doFinal(cypherText));
     
     
            }
            catch(Exception e){
                logger.error(e.getMessage());
            }
        }
    Le fichier se lit bien mais le contenu c'est des signes comme ""

    Donc sa plante à PublicKey pk = kf.generatePublic(publicKeySpec);
    avec l'erreur java.security.InvalidKeyException: IOException: X509.ObjectIdentifier() -- data isn't an object ID (tag = -96)


    Vous auriez une idée de ce qu'il y aurait de pas correct dans ma procèdure ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    C'est parce que tu ouvres ton fichier comme un bourrin.

    Les .crt sont au format PEM. Du coup il te faut d'abord enlever les bornes puis décoder le certificat qui est en Base64 avant de chercher à l'interpréter avec l'API de sécurité du SDK.

  3. #3
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 86
    Par défaut
    Tout d'abord, bonjour le respect ... C'est gentil.

    Ensuite, pourquoi avoir pris le temps de répondre si c'est pour être aussi vague ?

    Quels bornes ?

    Et je travail sur lequel des 2 fichiers crt ?

    Mais bon ... le << bourrin*>> que je suis va chercher, c'est toujours mieux que de se faire répondre par des têtes enflées, des réponses vagues.

  4. #4
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Désolé que tu le prennes comme ça mais tu as mal interprété ma réponse, c'était pas spécialement méchant, c'est juste un fait, t'as cherché à enfoncer la porte du fichier sans regarder mais peu importe.

    Citation Envoyé par Jonathan.Harvey
    Ensuite, pourquoi avoir pris le temps de répondre si c'est pour être aussi vague ?

    Quels bornes ?

    Et je travail sur lequel des 2 fichiers crt ?
    Si tu avais pris la peine de cliquer sur le lien que je t'avais donné, tu aurais vu sur le premier message de la page, je cite :

    The PEM format often is used for representing a certificate, certificate request, PKCS#7 object,... in US-ASCII by base64 encoding it and putting the encoding
    between the typical PEM delimiters
    ) e.g.:

    -----BEGIN CERTIFICATE-----
    MIIDAjCCAmsCEEakM712H2pJ5qjDp/WFQPUwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
    BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
    c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
    MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
    emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
    DTk4MDUxODAwMDAwMFoXDTE4MDUxODIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
    FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
    UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
    YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
    MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
    AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
    pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
    13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
    AQABMA0GCSqGSIb3DQEBBQUAA4GBABB79Ik/3D0LuwBM6zQoy/0HqUNphvJLAKTH
    1diwgngO7ZY8ZnsHB+E+c/Z+csjFQd0pSFxj6zb0dS7FBI2qu7a3FKWAZkY9AQzS
    wAC1SBtLHfQpR6g8QhdYLXh7IFACJ0ubJwvt8y9UJnNI8CWpifefyaqKYbfKDD3W
    hHcGFOgV
    -----END CERTIFICATE-----
    Donc en résumé, utilise un bon éditeur de texte, comme Notepad++ et ouvre tes fichiers CRT avec. Tu verras qu'ils sont sous le même format que l'exemple ci-dessus.

    Tu vires les bornes de début et de fin, et tu décodes la chaine en Base64. Ensuite tu enregistres ça dans un fichier avec .cer comme extension et tu n'as plus qu'à double cliquer dessus pour que Windows (tu es sur Windows je supposes ?) t'affiche le certificat.

    Si ça fonctionne, il ne te reste plus qu'à te faire la même chose mais par programmation.

  5. #5
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Mmh ....

    A la réflexion tu as un problème de plus c'est que ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    byte[] encodedKey = new byte[(int) keyFile.length()];
            try{
                new FileInputStream(keyFile).read(encodedKey);
                X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedKey);
                KeyFactory kf = KeyFactory.getInstance("RSA");
                // TEST
     
                PublicKey pk = kf.generatePublic(publicKeySpec);
    ne sont pas pertinentes.

    Le fichier permet de charger un certificat qui lui contient la clef publique. Tu as une fonction getPublicKey() qui renvoie une instance de PublicKey te permettant derrière de chiffrer.

    EDIT : Pour charger un certificat, cf CertificateFactory.

    Je suis tellement gentil ....

  6. #6
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 86
    Par défaut
    Je penses avoir pleins de problèmes finalement...

    Le certificat est format der


    Le CertificateFactory ma permet ( je pense ) d'encoder mon fichier, quoi que je suis même pas certain d'y avoir passer le bon paramètre dans getInstance..

    Sauf que sa ma permet que de generer ma cle publique.

    Pour le privée ?


    Définitivement, bourrin s'applique bien finalement ... parce que je fais n'importe quoi....

Discussions similaires

  1. taille X509 cle RSA 512
    Par nadisate dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 09/05/2009, 22h56
  2. Encodage/Decodage UTF-8 de données XML
    Par TickerOpcvm dans le forum Langage
    Réponses: 12
    Dernier message: 19/11/2008, 14h59
  3. [AJAX] encodage-decodage URL avec Java et Javascript
    Par alfreedd dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/06/2007, 13h45
  4. Problème encodage-decodage URL avec Java et Javascript
    Par alfreedd dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 27/04/2007, 12h11
  5. Clés RSA pour signer ET crypter
    Par Rhineauféros dans le forum Sécurité
    Réponses: 14
    Dernier message: 10/08/2006, 12h26

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