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

Contribuez Discussion :

Anonymisation de données avec ou sans cryptage


Sujet :

Contribuez

  1. #1
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut Anonymisation de données avec ou sans cryptage
    Bonjour,

    Suite à un échange avec pc75 nous ayant fait un peu transpiré, j'ai fait une petite fonction qui permet:
    - de mélanger les données,
    - et au besoin, crypter les informations
    et tout cela au travers d'un 'simple' update de la table.

    Sur les conseils de mon comparse (que je salue ici ), je poste la dite procédure.

    remarque : Je ne suis l'auteur que de l'assemblage de fonctions existantes (et non des fonctions utilisées à Messieurs Hubiche et Inisan)

    En espérant que cela puisse aider
    ps : si vous voulez suivre la discussion http://www.developpez.net/forums/d14...lect-imbrique/

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    ' Anonymisation de données
    ' fonction de mélange de données assortie avec une fonction de cryptage
    ' ======================================================================
    ' sur une idée de Pc75 dont j'ai été le bras armé
    ' réalisé en faisant un assemblage de deux fonctions :
    '       crypter ( Maxence Hubiche )
    '       alea ( Hervé Inisan )
    ' =======================================================================
    ' objet : permet de 'mélanger' les données d'une table en vue d'une anonymisation des données
    '  le principe est on fait un update des champs en affectant au champ d'1 enregistrement la valeur du même champ, ou d'un autre  
    ' mais issu d'un enregistrement choisi au hasard.
    ' pour les données vraiment sensibles il est possible en plus de crypter la donnée en fournissant une clé de cryptage  
    ' (si c'est pas de l'anonymisation ça ! ya plus qu'à jeter l'éponge)  
    ' contraintes : la table traitée doit avoir une valeur numérique en clé
    ' les paramètres : 
    '  nom_cle_num as string: nom de l'indentifiant qui contient la valeur numérique ,
    '  nom_rubrique as string: nom du champ à traduire ou mélanger 
    '  nom_table as string: nom de la table traitée 
    '  valeur_cle_min as double: valeur minimale de la clé numerique ( pour le choix aleatoire de valeur ),
    '  valeur_cle_max as double:valeur max de la clé numerique ( pour le choix aleatoire de valeur )
    '  valeur_actuelle as double : valeur de la cle numerique ( pour le calcul aléatoire )
    '  celcryptage as string : chaine de caractère utilisée pour le cryptage
    ' si le cryptage n'est utiliser fournir une chaîne vide "" en paramètre - (j'aime pas optional )  
    ' usage :
    ' update nomtable set <nomduchamp> = dfirst("ShakEtAnonimise('nomclenum','nomduchamp','nomtable', _ 
    '                                                     (select min(<nomclenum>) from nomtable), _
    '                                                     (select max(<nomclenum>) from nomtable), " & _
    '                                                      <nomtable>.<nomclenum> & _ 
    '													 'vnrfjzaerfaerf')","<nomtable>")
    '
    ' le dfirst est un artifice pour éviter le fameux message "utilisez une table qui peut être mise à jour"
    '
    Function ShakEtAnonimise(ByVal nomclenum As String, _
                     ByVal nom_rubrique As String, _
                     ByVal nom_table As String, _
                     ByVal valeur_cle_min As Double, _
                     ByVal valeur_cle_max As Double, _
                     ByVal valeur_actuelle As Double, _
                     ByVal clecryptage As String) As String
     
    Dim intermed As String
    Dim criteres As String
    '
    ' on construit le critère de sélection
    criteres = "[" & nomclenum & "]"
    criteres = criteres & "<= forcealea( " & valeur_cle_min & "," & valeur_cle_max & "," & valeur_actuelle & "-1)"
    '
    ' on regarde la dernière valeur trouvée
    intermed = DLast(nom_rubrique, nom_table, criteres)
     
    If clecryptage <> "" Then
        ShakEtAnonimise = Crypter(intermed, clecryptage)
    Else
        ShakEtAnonimise = intermed
    End If
    End Function
     
    ' Fonction d 'alea
    '==================
    ' FONCTION ALEA POUR REQUETE de  Hervé Inisan
    ' ---
    ' Entrée :    intInf <- Borne inférieure
    '             intSup <- Borne supérieure
    '                  v <- Une valeur quelconque, ou un champ de requête
    ' Sortie : ForceAlea -> Nombre entier entre intInf et infSup compris
    '
    Function ForceAlea( _
      ByVal intInf As Double, _
      ByVal intSup As Double, _
      ByVal v As Variant) As Double
     
      Randomize
      ForceAlea = Int(Rnd * (intSup - intInf + 1)) + intInf
    End Function
     
    ' Fonction de cryptage
    '=======================
    Function Crypter(ByVal chaîneACrypter As String, ByVal clef As String) As String
    '---------------------------------------------------------------------------------------
    ' Procedure : Crypter
    ' Créée le  : lundi 18 juil 2005 18:51
    ' Auteur    : Maxence HUBICHE
    ' Site      : http://mhubiche.developpez.com
    ' Objet     : Crypter la chaîne chaîneACrypter en fonction d'une clef et de la méthode
    '               de Vigenère
    '---------------------------------------------------------------------------------------
    '
        Dim sLettres    As String
        Dim lCompteur   As Long
        Dim lLongueur   As Long
        Dim lBoucle     As Long
     
        'Définition des constantes utiles pour la fonction (Clé et nombre d'itérations de la fonction maximum)
     '   Const CLEF              As String = "nbvfdszé""'(-è_ijhgfcKLKjhgyuilM^+)àçiu-('32azsDRtvBhujkoç_è6tre""zsXWqazerfcx<;:<?"
        Const NBROTATIONSMAX    As Long = 13
     
        'Définition de la longueur de la chaîne à crypter et de la chaîne de résultat
        lLongueur = Len(chaîneACrypter)
        sLettres = String(lLongueur, Chr(0))
     
        'Boucler en fonction du nombre de rotations attendues
        For lBoucle = 1 To NBROTATIONSMAX
            'boucler pour chaque caractère de la chaîne initiale
            For lCompteur = 1 To lLongueur
                'Remplacer le caractère de la chaîne à crypter par le caractère correspondant à
                '   le reste de
                '       la valeur ascii du caractère à crypter
                '       plus
                '       la valeur ascii du caractère correspondant dans la clé, multiplié par la longueur de la clé
                '   quand on le divise par 256
                Mid(sLettres, lCompteur, 1) = Chr((Asc(Mid(chaîneACrypter, lCompteur, 1)) + _
                        (Asc(Mid(clef, (lCompteur Mod Len(clef)) + 1, 1)) * lLongueur)) Mod 256)
            'recommencer
            Next
            'réaffecter la chaîne à crypter par le résultat trouvé pour pouvoir recommencer une itération
            chaîneACrypter = sLettres
        'Nouvelle itération
        Next
        'Renvoyer le résultat final
        Crypter = sLettres
    End Function
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 261
    Points
    34 261
    Par défaut
    C'est Maxence Hubiche, pas Marcel
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    Citation Envoyé par jpcheck Voir le message
    C'est Maxence Hubiche, pas Marcel
    oups désolé mais corrigé
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

Discussions similaires

  1. Comment accédez-vous aux données avec WPF sans ORM
    Par Clarkgbl dans le forum Accès aux données
    Réponses: 0
    Dernier message: 17/08/2012, 12h00
  2. Envoi fichier ou de données avec servlet sans formulaire
    Par jonbegood dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 08/10/2010, 08h51
  3. Réponses: 4
    Dernier message: 07/01/2009, 10h09
  4. [MySQL] Sélection avec condition sans base de données
    Par covin85 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/04/2007, 09h08
  5. Postfix/imap Avec ou sans base de donnée
    Par manu7781 dans le forum Administration système
    Réponses: 1
    Dernier message: 10/04/2007, 14h30

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