je cherche à effectuer un xor entre duex fichiers de même taille.
file1 XOR file2 => file3
je regarde la doc python, et apparement, il n'existe pas de fonction
prête à l'emploi (?)
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b'
et de faire une boucle du 1er au dernier octet du fichier en calculant
le xor de chaque octet? Pour des gros fichiers, n'est ce pas
consommateur en ressources?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Damien Wyart
* Kevin Denis in fr.comp.lang.python:
je cherche à effectuer un xor entre duex fichiers de même taille. file1 XOR file2 => file3
je regarde la doc python, et apparement, il n'existe pas de fonction prête à l'emploi (?)
En effet, j'ai la même impression. Même si la biblio standard est réputée très riche, elle ne peut pas non plus proposer TOUTES les fonctions imaginables... C'est quand même assez facile à recoder rapidement.
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b' et de faire une boucle du 1er au dernier octet du fichier en calculant le xor de chaque octet? Pour des gros fichiers, n'est ce pas consommateur en ressources?
Si les fichiers sont relativement petits, on peut les lire d'un coup et ensuite faire les calculs sur les chaînes correspondantes ; sinon les lire par blocs plutôt que octet par octet.
Voir ici (fin de page) http://www.amk.ca/python/writing/crypto-curiosa un bout de code qui fait ça de façon très simpliste et moche (c'est une page "fun" de type "code le plus court possible") mais ça peut donner une trame...
-- DW
* Kevin Denis <kevin@nowhere.invalid> in fr.comp.lang.python:
je cherche à effectuer un xor entre duex fichiers de même taille.
file1 XOR file2 => file3
je regarde la doc python, et apparement, il n'existe pas de fonction
prête à l'emploi (?)
En effet, j'ai la même impression. Même si la biblio standard est
réputée très riche, elle ne peut pas non plus proposer TOUTES les
fonctions imaginables... C'est quand même assez facile à recoder
rapidement.
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b' et
de faire une boucle du 1er au dernier octet du fichier en calculant le
xor de chaque octet? Pour des gros fichiers, n'est ce pas consommateur
en ressources?
Si les fichiers sont relativement petits, on peut les lire d'un coup et
ensuite faire les calculs sur les chaînes correspondantes ; sinon les
lire par blocs plutôt que octet par octet.
Voir ici (fin de page) http://www.amk.ca/python/writing/crypto-curiosa
un bout de code qui fait ça de façon très simpliste et moche (c'est une
page "fun" de type "code le plus court possible") mais ça peut donner
une trame...
je cherche à effectuer un xor entre duex fichiers de même taille. file1 XOR file2 => file3
je regarde la doc python, et apparement, il n'existe pas de fonction prête à l'emploi (?)
En effet, j'ai la même impression. Même si la biblio standard est réputée très riche, elle ne peut pas non plus proposer TOUTES les fonctions imaginables... C'est quand même assez facile à recoder rapidement.
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b' et de faire une boucle du 1er au dernier octet du fichier en calculant le xor de chaque octet? Pour des gros fichiers, n'est ce pas consommateur en ressources?
Si les fichiers sont relativement petits, on peut les lire d'un coup et ensuite faire les calculs sur les chaînes correspondantes ; sinon les lire par blocs plutôt que octet par octet.
Voir ici (fin de page) http://www.amk.ca/python/writing/crypto-curiosa un bout de code qui fait ça de façon très simpliste et moche (c'est une page "fun" de type "code le plus court possible") mais ça peut donner une trame...
-- DW
Kevin Denis
Le 21-10-2010, Damien Wyart a écrit :
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b' et de faire une boucle du 1er au dernier octet du fichier en calculant le xor de chaque octet? Pour des gros fichiers, n'est ce pas consommateur en ressources?
Si les fichiers sont relativement petits, on peut les lire d'un coup et ensuite faire les calculs sur les chaînes correspondantes ; sinon les lire par blocs plutôt que octet par octet.
Ok.
Voir ici (fin de page) http://www.amk.ca/python/writing/crypto-curiosa un bout de code qui fait ça de façon très simpliste et moche (c'est une page "fun" de type "code le plus court possible") mais ça peut donner une trame...
Et ça fonctionne bien, merci. -- Kevin
Le 21-10-2010, Damien Wyart <damien.wyart@free.fr> a écrit :
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b' et
de faire une boucle du 1er au dernier octet du fichier en calculant le
xor de chaque octet? Pour des gros fichiers, n'est ce pas consommateur
en ressources?
Si les fichiers sont relativement petits, on peut les lire d'un coup et
ensuite faire les calculs sur les chaînes correspondantes ; sinon les
lire par blocs plutôt que octet par octet.
Ok.
Voir ici (fin de page) http://www.amk.ca/python/writing/crypto-curiosa
un bout de code qui fait ça de façon très simpliste et moche (c'est une
page "fun" de type "code le plus court possible") mais ça peut donner
une trame...
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b' et de faire une boucle du 1er au dernier octet du fichier en calculant le xor de chaque octet? Pour des gros fichiers, n'est ce pas consommateur en ressources?
Si les fichiers sont relativement petits, on peut les lire d'un coup et ensuite faire les calculs sur les chaînes correspondantes ; sinon les lire par blocs plutôt que octet par octet.
Ok.
Voir ici (fin de page) http://www.amk.ca/python/writing/crypto-curiosa un bout de code qui fait ça de façon très simpliste et moche (c'est une page "fun" de type "code le plus court possible") mais ça peut donner une trame...
Et ça fonctionne bien, merci. -- Kevin
Pierre Maurette
Kevin Denis, le 10/21/2010 a écrit :
Bonjour,
je cherche à effectuer un xor entre duex fichiers de même taille. file1 XOR file2 => file3
je regarde la doc python, et apparement, il n'existe pas de fonction prête à l'emploi (?)
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b' et de faire une boucle du 1er au dernier octet du fichier en calculant le xor de chaque octet? Pour des gros fichiers, n'est ce pas consommateur en ressources?
J'ai regardé en vitesse. Faire les fichiers de test: open('sdata.dat', 'wb').write('maurette' * 100) open('key.dat', 'wb').write('zorglub4' * 100)
Fabriquer le fichier XORé: open('res.dat', 'wb').write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(open('sdata.dat', 'rb').read(), open('key.dat', 'rb').read())]))
Vérifier ((a xor b) xor b vaut a): open('verif.dat', 'wb').write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(open('res.dat', 'rb').read(), open('key.dat', 'rb').read())]))
Si vous traitez des fichiers énormes (au dessus du Go à mon avis) vous pouvez traiter par paquet:
def readPaquets(file1, file2, taillePaquet24*1024): while True: data1, data2 = (file1.read(taillePaquet), file2.read(taillePaquet)) if not data1 or not data2: break yield data1, data2
f = open('resultat.dat', 'wb+') for data1, data2 in readPaquets(open('sdata.dat', 'rb'), open('key.dat', 'rb'), 11): f.write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(data1, data2)]))
Et là aussi la preuve: f = open('verif.dat', 'wb+') for data1, data2 in readPaquets(open('resultat.dat', 'rb'), open('key.dat', 'rb'), 11): f.write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(data1, data2)]))
-- Pierre Maurette
Kevin Denis, le 10/21/2010 a écrit :
Bonjour,
je cherche à effectuer un xor entre duex fichiers de même taille.
file1 XOR file2 => file3
je regarde la doc python, et apparement, il n'existe pas de fonction
prête à l'emploi (?)
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b'
et de faire une boucle du 1er au dernier octet du fichier en calculant
le xor de chaque octet? Pour des gros fichiers, n'est ce pas
consommateur en ressources?
J'ai regardé en vitesse.
Faire les fichiers de test:
open('sdata.dat', 'wb').write('maurette' * 100)
open('key.dat', 'wb').write('zorglub4' * 100)
Fabriquer le fichier XORé:
open('res.dat', 'wb').write(''.join([chr(ord(x)^ord(y)) for (x, y) in
zip(open('sdata.dat', 'rb').read(), open('key.dat', 'rb').read())]))
Vérifier ((a xor b) xor b vaut a):
open('verif.dat', 'wb').write(''.join([chr(ord(x)^ord(y)) for (x, y) in
zip(open('res.dat', 'rb').read(), open('key.dat', 'rb').read())]))
Si vous traitez des fichiers énormes (au dessus du Go à mon avis) vous
pouvez traiter par paquet:
def readPaquets(file1, file2, taillePaquet24*1024):
while True:
data1, data2 = (file1.read(taillePaquet),
file2.read(taillePaquet))
if not data1 or not data2:
break
yield data1, data2
f = open('resultat.dat', 'wb+')
for data1, data2 in readPaquets(open('sdata.dat', 'rb'),
open('key.dat', 'rb'), 11):
f.write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(data1,
data2)]))
Et là aussi la preuve:
f = open('verif.dat', 'wb+')
for data1, data2 in readPaquets(open('resultat.dat', 'rb'),
open('key.dat', 'rb'), 11):
f.write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(data1,
data2)]))
je cherche à effectuer un xor entre duex fichiers de même taille. file1 XOR file2 => file3
je regarde la doc python, et apparement, il n'existe pas de fonction prête à l'emploi (?)
La solution est elle donc d'ouvrir les deux fichiers en mode 'r+b' et de faire une boucle du 1er au dernier octet du fichier en calculant le xor de chaque octet? Pour des gros fichiers, n'est ce pas consommateur en ressources?
J'ai regardé en vitesse. Faire les fichiers de test: open('sdata.dat', 'wb').write('maurette' * 100) open('key.dat', 'wb').write('zorglub4' * 100)
Fabriquer le fichier XORé: open('res.dat', 'wb').write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(open('sdata.dat', 'rb').read(), open('key.dat', 'rb').read())]))
Vérifier ((a xor b) xor b vaut a): open('verif.dat', 'wb').write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(open('res.dat', 'rb').read(), open('key.dat', 'rb').read())]))
Si vous traitez des fichiers énormes (au dessus du Go à mon avis) vous pouvez traiter par paquet:
def readPaquets(file1, file2, taillePaquet24*1024): while True: data1, data2 = (file1.read(taillePaquet), file2.read(taillePaquet)) if not data1 or not data2: break yield data1, data2
f = open('resultat.dat', 'wb+') for data1, data2 in readPaquets(open('sdata.dat', 'rb'), open('key.dat', 'rb'), 11): f.write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(data1, data2)]))
Et là aussi la preuve: f = open('verif.dat', 'wb+') for data1, data2 in readPaquets(open('resultat.dat', 'rb'), open('key.dat', 'rb'), 11): f.write(''.join([chr(ord(x)^ord(y)) for (x, y) in zip(data1, data2)]))