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 Delphi Discussion :

cryptage de données


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 41
    Points
    41
    Par défaut cryptage de données
    Bonjour
    Je voudrais faire ceci :
    Mon application lors de son ouverture décrypte mon fichier de base de données (FDB Firebird) et après les opérations et les traitement sur le fichier décrypté a la fermeture de l'application effectue une opération de cryptage de celui ci, ma question est simple :
    - Quelle est la meilleure méthode (algorithme, composant etc.) qui puisse faire ceci en respectant quelques conditions :
    1. Rapide pas gourmand en ressources (ma base peut facilement atteindre le gigaoctet vu que c'est une base ou sont stockés des fichiers binaires , photos et autres)
    2. Assurer un minimum de sécurité pour l'utilisateur final

    PS : Dans le cas d'une fermeture incorrecte de l'appli (gestionnaire des taches par exemple, redemarrage du PC) ya til une solution pour que la base ne reste pas décryptée sur le disque ??????

    Merci ! (chais pas mais j'adore ce smiley, a chaque fois que je le met on repond a mes questions)

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 41
    Points
    41
    Par défaut
    Petit PS :
    J'ai essayé de crypter les données a la saisie (champs = Onbeforepost) ca marche nickel car si on ouvre la base dans un autre utilitaire (IBEXPERT par exemple) on se retourve devant des champs cryptés.
    Mais a l'ouverture de lapplication impossible de décrypter les données à l'affichage (sur le dbgrid par exemple)
    En sql il doit y avoir une fonction qui décrypte tout les champs lors du SELECT mais je ne sais pas.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 41
    Points
    41
    Par défaut
    j'ai une idée ca peut paraitre ouf mais qui sait
    Si on créeait des composants, tedit, dbgrid, tcombobox etc.... avec propriété mot de passe ou clef string qui décrypte les données chargées depuis la base, et les afficherait décryptée, cela permet d'avoir une application avec base cryptée (champs cryptés lors du POST ou du commit) et une interface utilisateur final avec champs affichés décryptés, ca resoudrait en partie le probleme de sécurité niveau fichier des base de données ?!!! NON
    Mais faudrait :
    - Savoir programmer des compos (ce n'est pas dans mes cordes)
    - Savoir a quel moment le DBcontrol dessine les caractere chargés depuis le FIELD et la decrypter le contenu du champ !!!

  4. #4
    Membre régulier Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 77
    Points
    77
    Par défaut
    t'a trop d'idées! bizarres même
    - Savoir a quel moment le DBcontrol dessine les caractere chargés depuis le FIELD et la decrypter le contenu du champ !!!
    bon pour le cryptage du fichier fdb je pense que c'est une mauvaise idée, plus la taille du fichier est grande plus le temps de cryptage et décryptage est élevé.

    Tu commence par changer le mot de passe par défaut "masterkey" par un autre que que tu désigne. si cela ne te suffit pas, écrit une UDF en Delphi qui comporte deux fonctions de cryptage et décryptage de données et tu l'appelle depuis ton serveur firebird dans le triger OnBeforePost de ta table ou encore dans une procédure stockée ou une vue qui te retourne l'image de la table a décrypter

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 41
    Points
    41
    Par défaut
    C'est ce que j'ai fait mais pour l'écriture pas de problemes, on met la fonction de cryptage des données saisies dans le before post mais :
    Pour le ddécryptage ou est ce que je pourrai inserer la commande ???????
    Par exemple lors de l'affichage d'un DBGRID contenant 1000 enregistrement extrait de la base qui Y SONT CRYPTES quand est ce et dans quel evenement devra intervenir la fonction de decryptage a quel niveau SGBD, COMPO, APPLI ???
    La je rame !!! merci uand meme pour la réponse

  6. #6
    Membre régulier Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 77
    Points
    77
    Par défaut
    Tu dois décrypter au niveau de l'SGBD et pas au niveau Application. Les UDF sont des fonctions que tu peux écrire et les exporter dans des dll que firebird peut les utiliser.

    l'affichage des données décryptée se fait en appelant une vue ou une procédure stockée déjà créée dans ta base de données et que cette dernière appelle la fonction de décryptage

  7. #7
    Membre régulier Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 77
    Points
    77
    Par défaut
    Exemple du code firebird qui sélectionne les deux champs pat_l_name, pat_f_name, soit ils sont cryptés dans la table patients, puis on appèle la fonction "decrypte" (qui n'existe pas dans firebird) et que tu dois l'écrire dans delphi par exemple, la compiler dans une dll et l'appeler comme ci:
    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
     
    CREATE OR ALTER PROCEDURE GET_PATIENTS 
    returns (
        pat_f_name varchar(30),
        pat_l_name varchar(30))
    as
    begin
      for select 
                 pat_f_name,
                 pat_l_name
          from t_patients
          into 
               :pat_f_name,
               :pat_l_name
      do
      begin
       pat_f_name= "decrypte"(pat_f_name);
       pat_l_name= "decrypte"(pat_l_name);
       suspend;
      end
    end

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 41
    Points
    41
    Par défaut
    Si j'ai bien compris ceci est une procedure stockée
    Mais comment firebird connait la function DECRYPTE si elle dans le code delphi de mon applicaztion ???

  9. #9
    Membre régulier Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 77
    Points
    77
    Par défaut
    la procédure stockée get_patients retourne un ensemble de données, comme une table ou une vue. Donc au niveau Delphi dans la propriété SelectSQL de ta source de données tu mets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select 
     pat_f_name,
     pat_l_name
    from get_patients
    la procédure stockée s'exécute du coté serveur, son traitement reste transparent au niveau de ton application

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 41
    Points
    41
    Par défaut
    Sur le premier code que tu ma donné khaled c'est celkui de la procédure stockée, tu fait référence a DECRYPTE une fonction que Firebird ne connait pas et ce n'est pas un objet dans ma base de donnée, est ce que décrypte devra etre aussi une procédure stockée que je dois écrire dans ma base ??? si oui j'ai ma fonction qui utilise XOR, CHR et ORD pour crypter du texte et FB ne reconnait pas non plus ces commandes ???

    Merci

  11. #11
    Membre régulier Avatar de khaled-benloucif
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 77
    Points
    77
    Par défaut
    Essaye ça:

    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
    library encrypt;
     
    uses SysUtils;
     
    {$R *.res}
     
    function ib_util_malloc(l: integer): pointer; cdecl; external 'ib_util.dll';
     
     function encryptString(val: PChar): PChar;
     var R: String;
     begin
    	R:= String(val);// ton code qui crypte, ici bouchon de test
    	result:= ib_util_malloc(Length(R)+ 1);
    	StrPCopy(Result, R)
     end;
     
     function decryptString(val: PChar): PChar;
     var R: String;
     begin
    	R:= String(val);// ton code qui décrypte, ici bouchon de test
    	result:= ib_util_malloc(Length(R)+ 1);
    	StrPCopy(Result, R)
     end;
     
    exports
     encryptString,
     decryptString;
     
    begin
    end.
    compile la dll et place la dans le dossier udf de firebird, puis invoque la dans ta base de données depuis IbExpert puisque tu l'utilises. La syntaxe est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECLARE EXTERNAL FUNCTION encryptString
    CString(255) RETURNS CString(255) FREE_IT
    ENTRY_POINT 'encryptString' MODULE_NAME 'encrypt.dll'
     
    DECLARE EXTERNAL FUNCTION decryptString
    CString(255) RETURNS CString(255) FREE_IT
    ENTRY_POINT 'decryptString' MODULE_NAME 'encrypt.dll'

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Points : 41
    Points
    41
    Par défaut
    Merci khaled je vais tester ca et voir

Discussions similaires

  1. [Crypt]Fonction simple de cryptage des données
    Par Agoye dans le forum Sécurité
    Réponses: 5
    Dernier message: 30/08/2006, 19h35
  2. Cryptage des données
    Par DMboup dans le forum Contribuez
    Réponses: 1
    Dernier message: 07/06/2006, 19h37
  3. Cryptage des données en natif
    Par claude dans le forum Oracle
    Réponses: 7
    Dernier message: 03/04/2006, 14h15
  4. [ENCODE] Cryptage de données
    Par Huntress dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/11/2005, 17h51
  5. Quiz : testez vos connaissances sur le cryptage des données
    Par SheikYerbouti dans le forum Oracle
    Réponses: 0
    Dernier message: 08/10/2004, 10h06

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