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

Python Discussion :

crypt et decrypt données dans un fichier ini


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut crypt et decrypt données dans un fichier ini
    Bonjour,

    Avertissement: je débute en python

    En fait, j'aimerais faire un programme qui lit un fichier ini et crypte et décrypte les données cryptée qui sont dans le fichier ini.
    Le fichier ini est lus par un programme java qui utilise une passphase de 16 caractères et une encryption de type "AES"

    Ci dessous, mon code en l'état, je sais pas très bien où récupéré la valeur cryptée
    Et je ne sais pas si le configparser va bien garder les autres données présente dans le fichier ini

    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
     
    import configparser
    from Crypto.Cipher import AES
     
    filename = "<fichier ini>"
     
    passphrase = "12344678911234*1"
     
    # Writing Data
    config = configparser.ConfigParser()
    config.read(filename)
     
    # Reading Data
    keys = ["server", "port", "user", "password"]
    for key in keys:
        try:
            value = config.get("database", key)
    		if(key == "server")
    			currentHost = value;
    		if(key == "port")
    			currentPort = value;	
    		if(key == "user")
    			cipher = AES.new(passphrase, AES.MODE_EAX, nonce)
    			currentUser = cipher.decrypt_and_verify(value, tag)		
    		 if(key == "password")	
    			cipher = AES.new(passphrase, AES.MODE_EAX, nonce)
    			currentPassword = cipher.decrypt_and_verify(value, tag)
     
     
    #ASK User for modify data (ENTER keep current value)    
    sBuffer = input("Hostname ("+currentHost+"): ")
    if(sBuffer == "")
    	databaseHost = currentHost
    else
    	databaseHost = sBuffer
     
    sBuffer = input("Port ("+currentPort+"): ")
    if(sBuffer == "")
    	databasePort = currentPort
    else
    	databasePort = sBuffer
     
    sBuffer = input("Utilisateur ("+currentUser+"): ")
    if(sBuffer == "")
    	databaseUser = currentUser
    else
    	databaseUser = sBuffer
     
    sBuffer = input("Mot de passe : ")
    if(sBuffer == "")
    	databasePassword = currentPassword
    else
    	databasePassword = sBuffer
     
     
     
    try:
     
    config.set("database", "server", databaseHost)
    config.set("database", "port", databasePort)
     
    cipher = AES.new(passphrase, AES.MODE_EAX)
    ciphertext, tag = cipher.encrypt_and_digest(databaseUser)
    nonce = cipher.nonce
     
    ciphertext, tag = cipher.encrypt_and_digest(databasePassword)
    nonce = cipher.nonce
     
    cryptedUser = 
    cryptedPassword = 
     
    config.set("database", "user", cryptedUser)
    config.set("database", "password", cryptedPassword)
     
    with open(filename, "w") as config_file:
        config.write(config_file)
    Note : the passphrase is not the real passphrase

    Avez-vous quelques conseils et explications ?

    merci

  2. #2
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    Comme je fais mes tests sous Windows, j'ai installé python 3 et je tente d'installer les modules configparser et pycrypto.

    Aucun problème pour installer configparser , mais pour pycrypto, c'est un autre problème, il demande d'installer Visual C++ build tools, mais qu'est-ce qu'il faut installer exactement ?

  3. #3
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    J'ai essayé avec pycryptodome

    pip install pycryptodome
    Defaulting to user installation because normal site-packages is not writeable
    Collecting pycryptodome
    Downloading pycryptodome-3.20.0-cp35-abi3-win_amd64.whl.metadata (3.4 kB)
    Downloading pycryptodome-3.20.0-cp35-abi3-win_amd64.whl (1.8 MB)
    ---------------------------------------- 1.8/1.8 MB 9.4 MB/s eta 0:00:00
    Installing collected packages: pycryptodome
    Successfully installed pycryptodome-3.20.0
    Installation Ok, plus d'erreur avec pycryptodome

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Citation Envoyé par cormnsa
    je ne sais pas si le configparser va bien garder les autres données présente dans le fichier ini
    Si on demande pas à configparser d'écrire dans le fichier ini, pourquoi ne garderait-il pas les données ?

    Citation Envoyé par cormnsa
    Aucun problème pour installer configparser
    je me doute bien, c'est un module standard, pas besoin d'installer quoi que se soit...

    Citation Envoyé par cormnsa
    mais pour pycrypto, c'est un autre problème, il demande d'installer Visual C++ build tools, mais qu'est-ce qu'il faut installer exactement ?
    Toutes les réponses sur le GitHub du module amène à installer pycryptodome car selon les devs, pycrypto serait obsolète, mais si on souhaite faire cohabiter les deux modules, on fait pip install pycryptodomex.

    Nom : Capture d’écran_2024-06-20_09-06-23.png
Affichages : 170
Taille : 19,4 Ko



  5. #5
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    En fait, il me reste plus qu'a résoudre le contenu de la variable tag:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	if(key == "user")
    			cipher = AES.new(passphrase, AES.MODE_EAX)
    			currentUser = cipher.decrypt_and_verify(value, tag)
    		if(key == "password")
    			cipher = AES.new(passphrase, AES.MODE_EAX)
    			currentPassword = cipher.decrypt_and_verify(value, tag)
    Et savoir comment récupérer les valeurs cryptée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cipher = AES.new(passphrase, AES.MODE_EAX)
    ciphertext, tag = cipher.encrypt_and_digest(databaseUser)
    nonce = cipher.nonce
     
    ciphertext, tag = cipher.encrypt_and_digest(databasePassword)
    nonce = cipher.nonce
     
    cryptedUser = 
    cryptedPassword =
    Est-ce que ciphertext contient la valeur cryptée ou est-ce nonce ?


    --------------

    Concernant ma question sur configparser, il y a d'autres données que je veux pas permettre de modifier et qui donc que je fais pas lire par configparser.

  6. #6
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    Je viens de revoir le code car j'ai vus des erreurs de code (if mal formaté, etc.)
    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
     
    cipher = AES.new(passphrase, AES.MODE_EAX)
     
    # Read Data
    config = configparser.ConfigParser()
    config.read(filename)
     
     
     
    # Reading Data
    keys = ["server", "port", "user", "password"]
    for key in keys:
        try:
            value = config.get("database", key)
    		if key == "server":
    			currentHost = value
    		if key == "port":
    			currentPort = value
    		if key == "user":
    			currentUser = cipher.decrypt_and_verify(value)
    		if key == "password":
    			currentPassword = cipher.decrypt_and_verify(value)
     
    #ASK User for modify data (ENTER keep current value)
    sBuffer = input("Hostname ("+currentHost+"): ")
    if sBuffer == "":
    	databaseHost = currentHost
    else:
    	databaseHost = sBuffer
     
    sBuffer = input("Port ("+currentPort+"): ")
    if sBuffer == "":
    	databasePort = currentPort
    else:
    	databasePort = sBuffer
     
    sBuffer = input("Utilisateur ("+currentUser+"): ")
    if sBuffer == "":
    	databaseUser = currentUser
    else:
    	databaseUser = sBuffer
     
    sBuffer = input("Mot de passe : ")
    if sBuffer == "" :
    	databasePassword = currentPassword
    else:
    	databasePassword = sBuffer
     
     
     
    try:
     
    config.set("database", "server", databaseHost)
    config.set("database", "port", databasePort)
     
    cryptedUser = cipher.encrypt(databaseUser)
    cryptedPassword = cipher.encrypt(databasePassword)
     
    config.set("database", "user", cryptedUser)
    config.set("database", "password", cryptedPassword)
     
    with open(filename, "w") as config_file:
        config.write(config_file)
    Maintenant, selon mon IDE, j'ai un problème d'indentation et il manque des closes finally !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Par défaut
    Sans doute dans ton try
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
      print(a)
    except:
      print("An exception occurred")
    Ici, une documentation de la gestion des erreurs :
    https://docs.python.org/fr/3.5/tutorial/errors.html

  8. #8
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    J'ai enlevé les try et lancé un premier test qui à provoqué une erreur et en cherchant, j'ai trouvé qu'il fallait encoder la passphrase.
    Maintenant, j'ai une erreur "EaxMode.decrypt_and_verify() missing 1 required positional argument: 'received_mac_tag'"

    ==> C'est quoi ce mac_tag ?


    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
     
    encoded_passphrase = passphrase.encode("utf8")
     
    cipher = AES.new(encoded_passphrase, AES.MODE_EAX)
     
    # Read Data
    config = configparser.ConfigParser()
    config.read(filename)
     
    # Reading Data
    keys = ["server", "port", "user", "password"]
    for key in keys:
    	value = config.get("database", key)
    	if key == "server":
    		currentHost = value
    	if key == "port":
    		currentPort = value
    	if key == "user":
    		currentUser = cipher.decrypt_and_verify(value)
    	if key == "password":
    		currentPassword = cipher.decrypt_and_verify(value)
     
    #ASK User for modify data (ENTER keep current value)
    sBuffer = input("Hostname ("+currentHost+"): ")
    if sBuffer == "":
    	databaseHost = currentHost
    else:
    	databaseHost = sBuffer
     
    sBuffer = input("Port ("+currentPort+"): ")
    if sBuffer == "":
    	databasePort = currentPort
    else:
    	databasePort = sBuffer
     
    sBuffer = input("Utilisateur ("+currentUser+"): ")
    if sBuffer == "":
    	databaseUser = currentUser
    else:
    	databaseUser = sBuffer
     
    sBuffer = input("Mot de passe : ")
    if sBuffer == "" :
    	databasePassword = currentPassword
    else:
    	databasePassword = sBuffer
     
    config.set("database", "server", databaseHost)
    config.set("database", "port", databasePort)
     
    cryptedUser = cipher.encrypt(databaseUser)
    cryptedPassword = cipher.encrypt(databasePassword)
     
    config.set("database", "user", cryptedUser)
    config.set("database", "password", cryptedPassword)
     
    with open(filename, "w") as config_file:
        config.write(config_file)

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Je dirai le fichier ini... j'en ajouterai un autre qui serait le fichier comportant vos variables d'environnement (on le nomme souvent dans les projets ·env).

  10. #10
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Je dirai le fichier ini... j'en ajouterai un autre qui serait le fichier comportant vos variables d'environnement (on le nomme souvent dans les projets ·env).
    Le fichier .env... j'avais lus cela quelque pars et j'arrivais plus à trouver ...

    Je regarde cela

  11. #11
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Citation Envoyé par cormnsa
    C'est quoi ce mac_tag ?
    Je pense que c'est la valeur tag résultant de la méthode encrypt_and_digest.

    EDIT :

    Citation Envoyé par cormnsa
    j'ai juste un problème que la fonction me sort une valeurs en bytes et qu'il me faut un string.
    Utilisez votre interpréteur,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    In [1]: valeur_en_bytes = b'example'
     
     
    In [2]: type(valeur_en_bytes)
    Out[2]: bytes
     
     
    In [3]: valeur_en_string = valeur_en_bytes.decode('utf-8')
     
     
    In [4]: type(valeur_en_string)
    Out[4]: str

  12. #12
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut


    Traceback (most recent call last):
    File "C:\home\spu\workspace\python\sscc2enf_editconf\sscc2enf_editconf.py", line 31, in <module>
    print(currentUserBytes.decode())
    ^^^^^^^^^^^^^^^^^^^^^^^^^
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 0: invalid start byte

  13. #13
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Si le service lit le fichier de configuration en même temps que le script Python le modifie, cela peut poser des problèmes de concurrence, non ?

  14. #14
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    Le programme java charge le contenu du fichier au démarrage et il tourne avec les données chargées.

    La procédure pour éditer le fichier et la logique qui dois aller avec est : d'arrêter le service avant de faire l'édition du fichier de configuration
    Sinon, pour le fun... Comment on fait pour détecter qu'un programme xxx tourne en python ?

    Non, en fait, ce que je pourrais faire, c'est appeler le programme python de puis un script bash et dans le script bash tester si le programme java tourne et si oui => ne pas lancer le programme python !

  15. #15
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour.
    Citation Envoyé par cormnsa Voir le message
    Sinon, pour le fun... Comment on fait pour détecter qu'un programme xxx tourne en python ?

    Non, en fait, ce que je pourrais faire, c'est appeler le programme python de puis un script bash et dans le script bash tester si le programme java tourne et si oui => ne pas lancer le programme python !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if pgrep -f 'python3 prog.py' > /dev/null
    then
        echo "prog.py est actif."
    else
        echo "prog.py n'est pas actif."
    fi

  16. #16
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Puisque tu parles de "service", je regarderais plutôt du coté de systemd (systemctl is-active "nom_du_service"), même chose pour le stopper et redémarrer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    systemctl is-active truc && systemctl stop truc # on peut aussi lancer le stop sans test avant ;)
    ...
    systemctl is-active truc || systemctl start truc # test sans doute inutile
    ps: je ne suis pas sûr qu'un service va lire 36 fois son fichier de config, normalement c'est uniquement au démarrage. Donc un simple systemctl restart "service" est suffisant après modif du .ini

    Et en "pur" python, nous avons les lib psutil et, si utile, systemd

  17. #17
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Citation Envoyé par cormnsa
    Traceback (most recent call last):
    File "C:\home\spu\workspace\python\sscc2enf_editconf\sscc2enf_editconf.py", line 31, in <module>
    print(currentUserBytes.decode())
    ^^^^^^^^^^^^^^^^^^^^^^^^^
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 0: invalid start byte
    Rien de surprenant, vérifiez que votre fichier a été encodé en UTF-8, si ce n'est pas le cas, deux choix s'offrent à vous,
    1. Modifier l'encodage du fichier.
    2. Détecter l'encodage du fichier et remplacez utf-8 par l'encodage détecté.


    Sur un système Unix, l'encodage par défaut quand on enregistre un fichier est au format utf-8, si sur un système Windows, je ne sais pas quel est celui par défaut.

  18. #18
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    Pourtant, si j'ouvre le fichier avec notepad++, il me dit qu'il est en UTF-8 :-(

    En plus, c'est la variable issue du decryptage de la valeur présent dans le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentUserBytes = cipher.decrypt(value.encode("UTF-8"))
    Donc, il parvient à décrypter la valeur, mais il sort un truc qui n'est pas valide

  19. #19
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Si vous utilisez le paramètre encoding
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with open(filename, "w", encoding="utf8") as config_file:
    ça donne quoi ?


    EDIT : J'ai rien dis, je vois que l'erreur est ailleurs
    EDIT2 : D'où vient value ?

    Vous avez des exemples sur la documentation...

  20. #20
    Membre confirmé
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : dev. full stack
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2016
    Messages : 69
    Par défaut
    J'ai fais ceci (qui doit-être identique à votre suggestion)

    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
    # Read Data
    config = configparser.ConfigParser()
    config.read(filename, 'utf-8')
    
    # Reading Data
    keys = ["server", "port", "user", "password"]
    for key in keys:
    	value = config.get("database", key)
    	if key == "server":
    		currentHost = value
    	if key == "port":
    		currentPort = value
    	if key == "user":
    		print(value) <-- donnée correct
    		currentUserBytes = cipher.decrypt(value.encode("UTF-8"))
    	if key == "password":
    		currentPasswordBytes = cipher.decrypt(value.encode("UTF-8"))
    
    print(currentUserBytes)
    print(currentUserBytes.decode("UTF-8")) <-- UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8c in position 3: invalid start byte

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. récupéré un code crypté dans un fichier .ini
    Par FracMaster dans le forum Langage
    Réponses: 2
    Dernier message: 27/04/2007, 12h49
  2. Réponses: 8
    Dernier message: 18/07/2005, 14h04
  3. Unicité de nom de clés dans un fichier .INI
    Par The_Warlord dans le forum Langage
    Réponses: 8
    Dernier message: 11/11/2004, 12h16
  4. lire le point-virgule dans un fichier .ini
    Par juflata dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 05/07/2004, 12h46
  5. [VB6] Api pour supprimer dans un fichier INI
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/02/2003, 08h16

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