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

  1. #1
    Membre à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    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 à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    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 à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    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 éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 885
    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 : 3 885
    Points : 7 233
    Points
    7 233
    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 : 59
Taille : 19,4 Ko


    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    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 à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    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 actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 243
    Points : 219
    Points
    219
    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 à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    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
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 243
    Points : 219
    Points
    219
    Par défaut
    Un détail, tu peux transformer ce genre de chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if sBuffer == "":
    	databaseHost = currentHost
    else:
    	databaseHost = sBuffer
    en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    databaseHost = currentHost if sBuffer == "" else sBuffer

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    243
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 243
    Points : 219
    Points
    219
    Par défaut
    Citation Envoyé par cormnsa Voir le message
    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 ?
    La fonction decrypt_and_verify() prend deux paramètres.

    Je te laisse étudier la question :
    https://pycryptodome.readthedocs.io/.../examples.html

  11. #11
    Membre à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    Par défaut
    Ici, j'ai décidé d'utiliser le decrypt tout cours...

    Maintenant, j'ai juste un problème que la fonction me sort une valeurs en bytes et qu'il me faut un string.

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 885
    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 : 3 885
    Points : 7 233
    Points
    7 233
    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
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  13. #13
    Membre à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    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

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 885
    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 : 3 885
    Points : 7 233
    Points
    7 233
    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.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  15. #15
    Membre à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    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

  16. #16
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 885
    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 : 3 885
    Points : 7 233
    Points
    7 233
    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...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  17. #17
    Membre à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    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

  18. #18
    Membre à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    Par défaut
    Je ne sais pas comment cela se fait, mais en cherchant sur internet, j'ai trouvé le post suivant : https://stackoverflow.com/questions/...-byte-encoding

    Et j'ai comme suggérer fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import chardet
     
    ...
     
    the_encoding = chardet.detect(currentUserBytes)
    print (the_encoding)
    Et voici l'ouput :

    {'encoding': 'KOI8-R', 'confidence': 0.3199873848173409, 'language': 'Russian'}
    C'est un peu n'importe quoi :-(

  19. #19
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 885
    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 : 3 885
    Points : 7 233
    Points
    7 233
    Par défaut
    Citation Envoyé par cormnsa
    C'est un peu n'importe quoi
    Certes, en même temps ce n'est sûr qu'à 32%...

    Ne connaissant pas ce module je peux guère vous aidez plus, peut-être testé avec decode() (sans paramètre d'encoding).

    Je vous conseille de regarder à nouveau la documentation et de faire des petits tests (ils devraient être quand à eux fonctionnels), car vous envoyez des petits bouts de code non testables et qui ne me permet pas de vous aider.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  20. #20
    Membre à l'essai
    Homme Profil pro
    dev. full stack
    Inscrit en
    Octobre 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 58
    Points : 21
    Points
    21
    Par défaut
    Vus que c'est un programme annexe à un programme java, j'ai fais une recherche et j'ai trouvé ceci : https://stackoverflow.com/questions/...java-to-python

    Déjà, j'ai trouvé une erreur de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cipher = AES.new(encoded_passphrase, AES.MODE_EAX)
    j'ai changé et je suis passé à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cipher = AES.new(encoded_passphrase, AES.MODE_ECB)
    Et il y a du progrès dans le sens que maintenant, quand j'affiche la valeur bytes, j'ai la bonne valeur, mais il y a des \x08\x08\x08\x08\x08\x08\x08\x08 en plus et donc la conversion en str ne fonctionne pas.
    Mais je continue à chercher...

    merci pour l'aide

+ 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