La boîte à Tutoriels de Christopher PECAUD

Interagir avec Keepass en utilisant Python et le module PyKeePass

Laisser un commentaire

SOMMAIRE

I Introduction
II Prérequis
III Code
IV Conclusion

I Introduction

Dans ce document nous allons voir comment utiliser le langage Python pour interagir avec une base de données Keepass. Dans notre exemple nous allons partir d’une feuille de calcul Excel et nous allons ensuite importer les données dans la base de données Keepass. Nous verrons de même l’utilisation du module xlrd permettant de récupérer simplement les valeurs des cellules d’une feuille de calcul Excel.

II Prérequis

Pour pouvoir utiliser ces deux modules, PyKeePass et xlrd il va falloir les télécharger et les installer par l’intermédiaire du gestionnaire de paquets pip par exemple.

Pour installer le paquet PyKeePass il suffit d’exécuter la commande :

>pip install PyKeePass

Ce module contient plusieurs objets et fonctions permettant d’interagir avec l’application Keepass et sa base de données associée.

Ce module est très complet et vous pourrez par exemple :

  • Vous connecter à la base changer le mot de passe, choisir le type de cryptage et obtenir des informations sur l’application comme la version ;
  • Effectuer des recherches de groupes, d’entrées (enregistrements) en sélectionnant un critère particulier (titre, url, login, mot de passe, etc…) ;
  • Ajouter une entrée complète d’enregistrement de données de connexion dans un groupe que vous aurez choisi auparavant ;
  • Supprimer une entrée (enregistrement dans la base de données) suivant un critère ;
  • Sauvegarder les données et exporter les données dans un fichier xml.

Pour installer le module xlrd faites comme ceci :

>pip install xlrd

Xlrd est un module très simple d’utilisation qui vous permettra de réaliser la lecture simple des données contenues dans un tableau Excel. Il contient les objets relatifs à la gestion d’un tableau Excel :

  • Excel qui est l’objet représentant l’application ;
  • Workbook qui est le classeur Excel ;
  • Sheet qui est la feuille de calcul ;

Ensuite pour récupérer des données dans le tableur il suffit d’utiliser les fonctions et propriétés suivantes :

  • Ncols qui représente le nombre total de colonnes remplies dans le tableau ;
  • Nrows qui représente le nombre total de lignes remplies (y compris l’entête) ;
  • Open_Workbook qui est utilisé pour ouvrir le classeur Excel en lecture ;
  • Sheet_by_index permet de récupérer la feuille de calcul courante elle prend en argument l’index de la feuille de calcul. Cet index commence à partir de 0 pour la première feuille de calcul.
  • Cell_Value permettant de récupérer la valeur d’une cellule donnée.

Pour cet exemple, nous allons nous appuyer sur ce tableau :

description image

III Code

Nous allons mettre tout cela en application en lisant les données ces deux lignes du tableau et en les ajoutant dans la base de données Keepass.

Lecture du tableau Excel

Pour commencer il suffit d’importer les modules :

Import xlrd

From pykeepass import PyKeePass

Il faut ensuite ouvrir le fichier Excel en lecture :

oWb = xlrd.open_workbook(chemin_complet_fichier_Excel)

avec chemin_complet_fichier_Excel le chemin et le nom du fichier avec l’extension.

On ouvre ensuite la première feuille de calcul (ce qui est le cas en général) :

sheet = oWb.sheet_by_index(0)

Ensuite il suffit de balayer chaque cellule du tableau remplie pour en obtenir la valeur. Pour cela nous avons besoin comme énoncé plus haut des deux propriétés nrows et ncols qui nous renvoient le nombre total de lignes et de colonnes. Nous aurons besoin d’un dictionnaire pour stocker les différentes informations récupérées dans le tableau sous forme de clé valeur. Nous aurons ensuite besoin d’une liste pour insérer toutes les valeurs du dictionnaire :

data2import_list = []

Et

data2import_dict = {}  

Pour itérer chaque cellule du tableau il nous faut deux boucles imbriquées une pour les colonnes et une autre pour les lignes. Voici le code permettant cette opération :

# Boucle permettant d'itérer chaque ligne du tableau sans l'entête

for i in range(1, sheet.nrows):

    data2import_dict = {}    

    for j in range(sheet.ncols):

        # Récupération du nom de chaque colonne

        columnname = sheet.cell_value(0, j)

        # Stockage de la valeur dans le dictionnaire

        data2import_dict[columnname] = sheet.cell_value(i,j)

    # Insertion du dictionnaire créé dans la liste

    data2import_list.insert(i, data2import_dict)

A noter que cell_value prend en argument :

  • L’index de la ligne ;
  • Puis l’index de la colonne

A ce stade les données sont stockées dans notre dictionnaire et nous pouvons commencer à travailler sur notre base de données Keepass.

Gestion de la base de données Keepass

Afin de pouvoir interagir avec une base de données Keepass il faut utiliser le constructeur de l’objet PyKeePass :

oKeepass = PyKeePass(chemin_complet_kdbx, mot_de_passe_associe)

avec chemin_complet_kdbx le chemin complet et le nom du fichier avec l’extension kdbx.

Par exemple : C:\\users\\username\\documents\\Mydb.kdbx

Et

mot_de_passe_associe le mot de passe configuré associé lors de la création de la base de données dans l’application

Une fois connecté nous pouvons travailler sur cette base en récupérant la liste complètes des groupes définis dans l’application en utilisant la propriété groups comme ceci :

groups = oKeepass.groups

Vous obtenez un objet de type liste comprenant tous les noms de groupes.

Mais vous pouvez aussi rechercher un groupe particulier en utilisant la méthode :

oKeepass.find_groups_by_name('Personnel')

Cette méthode retourne une liste de noms de groupe contenant la valeur transmise en argument.

Nous pouvons par exemple créer un groupe si celui-ci n’existe pas :

if oKeepass.find_groups_by_name('Personnel') == None:

    group = oKeepass.add_group(oKeepass.root_group, 'Personnel')

La méthode add_group permet la création de ce groupe et prend en argument :

  • Le groupe initial dans lequel nous allons créer le groupe ;
  • Le nom du groupe à créer.

La propriété root_group permet de designer la racine des groupes.

Revenons maintenant au sujet de cet article qui est de stocker les données récupérées de notre tableur Excel dans la base de données Keepass.

Je vous rappelle que pour Keepass une entrée est un enregistrement complet. Nous allons donc itérer chaque dictionnaire inclus dans notre liste et en récupérer les données pour en récupérer chaque valeur pour chacune des propriétés associée à une entrée :

for data in data2import_list:

    print(data)

    for key, value in data.items():

        if key == 'Nom':

            title=value

        if key == 'Login': 

            login = value

        if key == 'Mdp': 

            pwd = value

        if key == 'URL':

            url = value

        if key == 'Type':

            if value == 'Web':

                # On recherche tous les groupes qui possèdent 'Internet' dans leur nom

                group = oKeepass.find_groups_by_name('Internet')   

Une fois les informations récupérées et stockées dans les variables associées, nous pouvons les passer en arguments à la méthode add_entry :

# On ajoute un enregistrement dans la base de données Keepass avec les variables définies précédemment

    oKeepass.add_entry(group[0], title, login, pwd, url)

Je vous rappelle que l’objet group est une liste même si elle ne contient qu’un seul élément. Il est donc nécessaire de prendre le premier élément de la liste dont l’index commence à 0.

Pour sauvegarder les données ajoutées dans la base il est nécessaire de faire appel à la méthode save() :

# On sauve les données  

oKeepass.save()

Nous pouvons de même récupérer des informations incluses dans la base de données Keypass, comme par exemple des enregistrements particuliers. Pour ce faire il suffit d’utiliser la méthode find_entries_by_title par exemple comme suit :

entries = oKeepass.find_entries_by_title('Site 1')

Cette méthode prend en paramètre le nom du site et retourne une liste d’entrées correspondant à la recherche.

Il suffit de récupérer ensuite les valeurs de propriété voulue de chaque entrée retournée comme ceci :

for entry in entries:

    # On récupére l'url associée    
    print(entry.url)

    # On récupère le login
    print(entry.username)

    # On récupère le mot de passe
    print(entry.password)

IV Conclusion

Ce document vous a permis de comprendre comment utiliser le module PyKeePass avec Python pour pouvoir interagir avec une base de données Keepass. En seulement quelques lignes vous pouvez importer un grand nombre d’enregistrements dans la base de données KeePass. Nous avons pu utiliser de même le module xlrd qui permet de lire simplement des données dans un classeur Excel.

blog comments powered by Disqus