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

Hibernate Java Discussion :

Récupérer champ crypté avec hibernate


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Par défaut Récupérer champ crypté avec hibernate
    Bonjour,

    Je peux récupérer correctement toutes les données de ma base SQL Server 2008 avec hibernate grace aux get qui ont été créés automatiquement, mais je possède certains champs dans certaines tables qui sont cryptés et donc récupérés en tant que "Blob" dans la classe associée.

    Ces champs peuvent être décryptés à l'aide d'une requete SQL (qui fonctionne sous le SQL Management Studio) du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *,CONVERT(nvarchar(max), DecryptByAsymKey( AsymKey_Id('MaCleDeCryptage'),MON_CHAMP_CRYPTE, N'CeciEstMonMotDePasseTresSecuriseQuiPermetDeCrypterDesDonnéesConfidentielles' )) 
    AS MON_CHAMP_DECRYPTE
    FROM MA_TABLE
    GO
    Est-il possible d'insérer une telle requete au niveau de hibernate afin de récupérer les données décryptées de ces champs ?

    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
    Le mieux serait de faire le décryptage dans ton getter, avec du pur code java. Il faudrait déjà pour ca savoir comment les données sont cryptées (algorithme). Sinon il faudra créer un getter contenant ce style de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    byte[] donnesCryptees; //+getters/setter classique
    byte[] donneesDecryptees;
    public getDonneesLisibles {
     if (donneesDEcryptees ==null){
        // acceder à la session hibernate
        // acceder à la connection DB
        // effectuer la requet pour decrypter
        // mettre la valeur decryptées dans donnesDecryptees 
     }
     return donneesDecryptees;
    }
    Si tu veux isoler tes beans d'hibernate, alors il faudra probablement s'orienter vers un usertype personnalisé.
    Tu as aussi l'option du mapping en utilisant "formula" si c'est de la lecture seule

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Le mieux serait de faire le décryptage dans ton getter, avec du pur code java. Il faudrait déjà pour ca savoir comment les données sont cryptées (algorithme)
    Merci pour ta réponse. L'algorithme de cryptage utilisé ici est RSA_2048, le décryptage peut-il se faire une fois le champ (binaire) récupéré ?

  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
    le RSA fait normalement partie des api cryptographiques supportées par java. Tu peux donc tenter le coup en récupérant un donnée et en tentant de la décrypter avec l'api cryptographique de java. Si t'as des problème de ce point de vue là, n'hésite pas a consulter les ressources, FAQs et le forum java -> api -> Sécurité.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Par défaut
    Je vais chercher de ce coté mais la requete necessite une clé (qui est sur la base), plus un mot de passe donc je ne pense pas que le décryptage soit possible ici sans passer par la requete. La dessus, aurais tu des exemples car j'ai tenté le code suivant, qui ne pose pas d'erreur mais en mode debogage, la valeur récupérée dans la variable est null (mais l'ensemble des autres champs, non cryptés, est bien récupérable). Pour info, j'ai bien fais le get dans la classe associée ; et j'ai rajouté dans le .hbm.xml correspondant un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <property name="montant_decrypte" type="string">
                <column name="MONTAT_DECRYPTE" length="50" />
            </property>
    qui n'a rien changé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    String query = "SELECT *,CONVERT(nvarchar(max), DecryptByAsymKey( AsymKey_Id('MaCleDeCryptage'),CHAMP_CRYPTE, N'CeciEstMonMotDePasseTresSecuriseQuiPermetDeCrypterDesDonnéesConfidentielles' )) AS CHAMP_DECRYPTE FROM TABLE";
    List<TABLE> tables = session.createSQLQuery(query)
    .addEntity(TABLE.class)
    .list();

  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
    comme je l'ai dit, pour un champ en lecture seule, tu peux utiliser le "formula" qui est un manière de mapper un bout de requete sql
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="champDecrypte" formula="CONVERT(nvarchar(max), DecryptByAsymKey( AsymKey_Id('MaCleDeCryptage'),CHAMP_CRYPTE, N'CeciEstMonMotDePasseTresSecuriseQuiPermetDeCrypterDesDonnéesConfidentielles' ))"

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

Discussions similaires

  1. Récupérer un champ crypté via hibernate avec eclipse
    Par Dadishome dans le forum Autres
    Réponses: 0
    Dernier message: 22/12/2009, 18h51
  2. Récupérer valeur d'un champ gridView avec bouton select
    Par loubna_drime dans le forum ASP.NET
    Réponses: 0
    Dernier message: 20/05/2009, 22h32
  3. Récupérer la valeur d'un champ submit avec IE
    Par tochbee dans le forum Langage
    Réponses: 9
    Dernier message: 18/05/2009, 11h59
  4. récupérer fichier d'un champ file avec "import"
    Par dida.ratsimba dans le forum W4 Express
    Réponses: 2
    Dernier message: 18/11/2008, 12h38
  5. Réponses: 3
    Dernier message: 27/04/2007, 16h31

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