Encodeur et décodeur de fichiers en base64 [Résolu]

Messages postés
67
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
15 juin 2019
- - Dernière réponse : NHenry
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
- 22 mai 2019 à 19:15
Bonjour,

J'ai créé deux programmes.
Le premier sert à convertir un fichier quelconque en un fichier texte base64, et l'autre sert à faire l'inverse

Le problème, c'est que quand je convertis un GROS fichier vidéo en base64, puis le reconvertis en vidéo, le fichier obtenu au final est corrompu.

Voici le premier programme :
import base64

file_path = input()

file = open(file_path, 'rb')
file_2 = open(file_path+'.txt', 'wb')

while True:
    data = file.read(10000000)
    data_encoded = base64.b64encode(data)
    file_2.write(data_encoded)
    if not data:
        break


file.close()
file_2.close()


Voici le deuxième programme :
import base64

file_path = input()

file = open(file_path+'.txt', 'rb')
file_2 = open(file_path, 'wb')

while True:
    data = file.read(10000000)
    data_decoded = base64.b64decode(data)
    file_2.write(data_decoded)
    if not data:
        break


file.close()
file_2.close()



Quelqu'un pourrait-il m'expliquer pourquoi le fichier que j'obtiens finalement est corrompu ?

Merci d'avance pour votre réponse
Afficher la suite 

1 réponse

Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
168
0
Merci
Réfléchis un peu à ton code, tu lis une partie du fichier, 10 000 000 octets 10 Mo, puis tu convertit cette partie en base 64 (soit 13333333,3333 octets à l'arrivée (donc 2= à la fin), cela représente 13 333 335 octets).
Pour l'inverse tu lis 10 000 000 octets 10 Mo de base 64 que tu reconvertis en binaire, il y a une dissymétrie ...

Tu ne semble pas avoir compris comment fonctionne la base 64, renseignes-toi plus.
NHenry
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
168 -
Car tu coupes ton fichier dans les 2 sens et comme les coupures ne sont pas au même endroit, cela "casse" le fichier.
UltraBot
Messages postés
67
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
15 juin 2019
-
Comment résoudre ce problème ?
NHenry
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
168 -
Soit convertir tout le fichier d'un coup ou faire un découpage plus cohérent du fichier.
UltraBot
Messages postés
67
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
15 juin 2019
-
Finalement, j'ai un peu modifié mon deuxième programme, et ça marche très bien.
Voici mon deuxième programme après modification :
import base64

file_path = input()

file = open(file_path+'.txt', 'rb')
file_2 = open(file_path, 'wb')

while True:
    data = file.read(13333336)
    data_decoded = base64.b64decode(data)
    file_2.write(data_decoded)
    if not data:
        break


file.close()
file_2.close()
NHenry
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
168 -
Si le problème est résolu, merci de marquer le sujet comme résolu.
Commenter la réponse de NHenry