[R] Ecrire dans un fichier en binaire

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

[R] Ecrire dans un fichier en binaire

#1

Message par matwachich »

Salut à tous!
Il y a un petit truc qui me tracasse, et j'aimerai avoir votre avis.

Quand je lance ce code, je pense que ce n'est pas normal de voir le texte en claire dans bloc-note, on devrai plutôt voir du charabia correspondant à du binaire, n'est pas?

Code : Tout sélectionner

FileDelete("test.txt")
$bin = StringToBinary("salut les mecs ààà ééé èèè", 4)
ConsoleWrite($bin & " - " & VarGetType($bin) & @CRLF)

$f = FileOpen("test.txt", 18)
FileWrite($f, $bin)
FileClose($f)

ConsoleWrite(FileRead("test.txt") & @CRLF)
ShellExecute("test.txt")
 
Alors, qu'ai-je raté?
MERCI
Modifié en dernier par matwachich le sam. 03 déc. 2011 14:25, modifié 1 fois.
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Ecrire dans un fichier en binaire

#2

Message par Tlem »

:shock:
Vous convertissez une chaine en binaire, puis vous ouvrez un fichier pour y écrire en mode binaire, donc il est normal ce même fichier ouvert normalement affiche le texte 'd'origine'. A un détail prêt, c'est que vous passez par de l'UTF8 en conversion mais pas en écriture, d’où la conversion des caractères accentués. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Ecrire dans un fichier en binaire

#3

Message par matwachich »

Bah les caractères accentués reste comme tel dans le bloc note, il ne sont pas convertis.
Ce que j'aimerai, c'est arriver à ce résultat (que le fichier soit illisible en mode texte, c'est à dire dans le bloc note)
► Afficher le texte
Sans être obliger de crypter

Possible???

PS: Même sans le StringToBinary, le texte est toujours lisible
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Ecrire dans un fichier en binaire

#4

Message par Tlem »

Code : Tout sélectionner

FileWrite($f, StringTrimLeft($bin, 2))
En fait, AutoIt semble interpréter la chaine si elle est préfixée.
Sans le préfixe, cela fonctionne beaucoup mieux (je m'étais déjà fait avoir). ;)

Edit : Je vois que jchd écrit sa réponse qui donnera sans aucun doute toute la lumière sur ce grand mystère. :lol:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Ecrire dans un fichier en binaire

#5

Message par jchd »

C'est en fait un poil plus subtil. Ces questions d'encodage(s) sont toujours assez piégeantes, c'est vrai.

Quand tu fais StringToBinary("salut les mecs ààà ééé èèè", 4) tu récupères une chaîne d'octets (ne parlons pas de binaire ici, qui "rajoute une couche" et fait penser à certains à une suite de 0 et de 1) qui correspond à ta chaîne sous encodage UTF-8. Ainsi, StringToBinary("€", 4) contient trois octets E2 82 AC.

Si tu écris cette suite d'octets dans un fichier ouvert en mode binaire (option 16), tu l'écris telle qu"elle est en mémoire. Ton fichier est donc au format UTF-8 _sans_ BOM. Tout éditeur hexa te le montrera.

Quand tu relis ce fichier avec FileRead, ce dernier fait son possible pour tenter de déterminer l'encodage. Malgré le fait que ton fichier ne contienne pas de BOM, il l'interprète quand même en UTF-8 car ce fichier est compatible avec cet encodage (et pour cause, c'en est). C'est un comportement que personnellement je trouve douteux et pénalisant pour tous nos amis asiatiques, entre autres.

ConsoleWrite écrit dans une console qui interprête tout selon l'encodage paramétré pour Scite. Perso, je travaille en Unicode (page de code 65001) mais Scite arrive par défaut avec l'encodage ANSI de l'utilisateur ou, par défaut, avec celui de l'OS. Donc si tu as Scite paramétré en ANSI, tu vas retrouver ta chaîne si et seulement si elle ne contient que des caractères UTF-8 qui ont un équivalent dans ta page de code.

Maintenant lors du ShellExecute, c'est l'éditeur par défaut pour l'extension qui l'ouvre et il se trouve que ton Notepad effectue le même type de test sur le contenu du fichier et s'il le trouve compatible UTF-8, il te l'affiche en tant que tel.

Par contre tu auras une différence à l'affichage par ConsoleWrite si tu reprends la chaîne russe de l'autre jour (aucun de ces caractères ne figure dans l'ANSI Windows Europe de l'Ouest que nous utilisons en grande majorité) tu auras des ??? (caractère de remplacement).

Cette bougie t'apporte-t-elle une lueur ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Ecrire dans un fichier en binaire

#6

Message par jchd »

Quant à ce qui est de rendre illisible au premier gougnafier venu et sans chiffrer, il y a des possibilités (foireuses) à portée de quelques lignes d'AutoIt qui laisseront dans le vent ma gamine de 9 ans mais pas sa soeur de 18.

Si tu veux Mata, je te MP l'idée (avec le big boss en copie, ça peut lui servir). Par contre, tout le monde sait qu'on ne protège pas un programme, donc la clé sera toujours sous le paillasson... Et ça on n'y peut rien.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Ecrire dans un fichier en binaire

#7

Message par matwachich »

@tlem:
Ce n'est pas le genre de charabia avec des lettres majuscules que je cherche, ce qui arrive si j'utilise ta méthode du StringTrimLeft, mais plutôt celui qu'on obtient en ouvrant un fichier exe ou jpg avec le bloc note. Un truc du genre

Code : Tout sélectionner

›™GH{  „ÊœõX±?æ ¼£EÒµ    k
@jchd:
Je n'ai pas tout pigé, c'est compliqué ses histoires d'encodage. Ce que j'ai un peut compris, c'est que si le variant binaire écris par AutoIt dans le fichier correspond à du texte, bah la console et le note pad, font en quelque sorte un BinaryToString tout seuls, sans qu'on leur demande.
C'est pour ça que quand j'écris un variant binaire issu de _Crypt_EncryptData, qui ne correspond pas à du texte (du moins, pas en claire) alors leurs BinaryToString ne marche pas, et ils (console et note pad) m'affichent du charabia.

Le seul truc que je sais, étant francophone (les é è à ç ...), partout ou je voit un flag qui dit: "truc machin chouette UTF-8" je le met!

En tout cas, cette question c'était pour la fonction Import/Export de mon nouveau programme: MyDico, et j'ai réglé le problème en cryptant les données.

Pour le truc foireux, je prend sans hésiter!!! :P

MERCI!

PS: je n'utilise plus Scite depuis longtemps! vive programmer's notepad!
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Ecrire dans un fichier en binaire

#8

Message par Tlem »

@matwachich
La chaine que vous présentez semble illisible parce qu'elle fait appel à des caractères non imprimable ou à des caractères de la table étendue ASCII (ou d'une autre table). Jetez un œil ici : http://www.autoitscript.fr/autoit3/docs ... /ascii.htm

Mais puisque vous parlez d'éditeur hexa, amusez vous à créer un fichier texte (ou peut importe l’extension) et collez lui un texte normal. Vous constaterez qu'avec l'éditeur hexa, ce texte reste lisible. :P
Tout ce que vous aurez, c'est une valeur hexadécimale et sa correspondance dans la table ASCII. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre