prebleme d'ecriture dans un fichier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

prebleme d'ecriture dans un fichier

Message par scaraber »

Salut,
J'ai un petit probleme j'ai essayer de faire un systemede cryptage de fichier. je lit chaque octel un par un (ReadByte) que je réécris avec un (WriteByte) sauf que le probleme c'est que quand jouvre ensuite le fichier ecris en texte sous notepad, avec le notepad sa me met des carré, les byte sont bien ecris (bon identifiant de la lettre) mais sa l'affiche mal?
Quelqu'un connait-il un moyen de modifier les octe d'un fichier sans les probelem que je rencontre . ...
a+
scaraber
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: prebleme d'ecriture dans un fichier

Message par Backup »

scaraber a écrit :Salut,
J'ai un petit probleme j'ai essayer de faire un systemede cryptage de fichier. je lit chaque octel un par un (ReadByte) que je réécris avec un (WriteByte) sauf que le probleme c'est que quand jouvre ensuite le fichier ecris en texte sous notepad, avec le notepad sa me met des carré, les byte sont bien ecris (bon identifiant de la lettre) mais sa l'affiche mal?
Quelqu'un connait-il un moyen de modifier les octe d'un fichier sans les probelem que je rencontre . ...
a+
scaraber
donne ton code !! :D
comment veut tu que l'on voit ou le code merdoie, si on ne le vois pas ?

a tu essayé de charger le resultat de ton algorythme de criptage avec un editeur Hexa , pour savoir ce que ton prg sort ?
si les codes hexa du fichier en sortie sont inferieur a 32 ou superieur a 127, tu aura des problemes !!

N'oublie pas qu'en purebasic un octet va de -128 à +127 !!
et pas de 0 a 255 ! :)
il te faudra faire un

Code : Tout sélectionner

 
code2.l =code.b & 255
 
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

Encrypteur:

Code : Tout sélectionner

Fichier$=OpenFileRequester("Choissisez un fichier a crypter","","",0)
OpenFile(0,Fichier$)
OpenFile(1,Fichier$+".crypt")
Dim Datas.b(2048)
Cle=Random(6)
While Eof(0)=0
  Byte=ReadByte(0)
  Byte=Byte+Cle*ByteID
  While Byte>127
    Byte-255
  Wend
  Datas(ByteID)=Byte
  ByteID+1
Wend
WriteByte(1,Cle)
While ByteID>0
  WriteByte(1,Datas(ByteID))
  ByteID-1
Wend
CloseFile(0)
CloseFile(1)
MessageRequester("Fichier Crypter","Complete")
Decrypteur:

Code : Tout sélectionner

Fichier$=OpenFileRequester("Choissisez un fichier a decrypter","","",0)
OpenFile(0,Fichier$)
OpenFile(1,Left(Fichier$,Len(Fichier$)-5))
Dim Datas.b(2048)
Cle=ReadByte(0)
ByteID=Lof(0)-1
While Eof(0)=0
  Byte=ReadByte(0)
  Byte=Byte-Cle*ByteID
  While Byte<-128
    Byte+255
  Wend
  Datas(ByteID)=Byte
  ByteID-1
Wend
While ByteID<Lof(0)-1
  WriteByte(1,Datas(ByteID))
  ByteID+1
Wend
CloseFile(0)
CloseFile(1)
MessageRequester("Fichier Crypter","Complete")
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ton problem viens de ça :(dans l'encrypteur)

Code : Tout sélectionner

While Byte>127
        Byte-255
tu test si c'est superieur a 127 , mais que ce passe t'il si c'est inferieur a 0 ??

essaie de tracer ton prg pas a pas en lui faisant lire un fichier txt
avec ecris dedans cette phrase :
ceci est un essai
tu verra le probleme a partir du "e" de "est" !! :D
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

je par du principe que mon cryptage augmente la valeur de l'octet et que un byte va de -128 a +127 donc si on ne peu etre que au dessus
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

scaraber a écrit :je par du principe que mon cryptage augmente la valeur de l'octet et que un byte va de -128 a +127 donc si on ne peu etre que au dessus
c'est quand meme domage que tu n'ecoute pas ce que je te dit ! :?
voici la preuve par l'image que tu obtient dans certain cas des chiffres négatif !!

regarde bien la variable "Byte" elle est egale a -110 !!! sur la lettre "s"

Image

dans ce cas ton While Byte>127 ne sert a rien !!
et c'est bien un chiffre négatif qui va etre ecrit en sortie !! :?

la lettre "s" a le code 115
le ByteID est egale a 6
Cle est egale a 5

et ta formule donne

Byte=Byte+Cle*ByteID

soit : 115+(5*6)=145

byte =145 , seulement ton byte est un .b , IL NE PEUT DEPASSER 127
voila pourquoi tu as un chiffre négatif !!
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

j'ai regarder ce que tu as dit mais j'ai juste expliquer pourquoi javait mis superieur a 127 et pas inferieur, j'etait crever hier soir, j'ai pas eu le temps de tester

Edit
et c'est bien un chiffre négatif qui va etre ecrit en sortie !! Confused
purebasic lit bien aussi en negatif, donc on peu en theorie ecrire en negartif ... Si purebasic lit -20, que jele cryptage le modifie et donne 50 puis redonne -20 je ne voit pas ou est l e probleme ... ?, je passserais la variable Byte en long, pour tester si sa marche mieux
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

scaraber a écrit : purebasic lit bien aussi en negatif, donc on peu en theorie ecrire en negartif ... Si purebasic lit -20, que jele cryptage le modifie et donne 50 puis redonne -20 je ne voit pas ou est l e probleme ... ?, je passserais la variable Byte en long, pour tester si sa marche mieux
oui purebasic ecrit du négatif !! :lol:
le probleme c'est qu'en principe dans mon exemple , il ecrit -110
alors qu'il aurai du ecrire 145 !! ce n'est pas vraiment pareille voit tu :D
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

bha meme si on met un nombre negatif lors du cryptage, le decryptage fait l'inverse ... non ?
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Si je peux te donner un truc Scaraber évite de faire trop de ReadByte et Write Byte, chaque instruction fait (en théorie) un accès disque.
Deux problèmes à cela:
- le disque est un perifphérique mécanique qui s'use et mieux vaut économiser un organe qui s'il tombe en panne ....
- chaque accès disque est beaucoup plus long qu'un accès mémoire et si tu traites des fichiers longs tu vas sentir que le temps de réponse devient catastrophique.

Si tu veux mon avis, et je pense qu'ici peu de monde me contradira, préfère les accès mémoire.

Pour être plus clair

Tu demande à Pure Basic de réserver une place mémoire aussi importante que la taille du fichier que tiu veux traiter et tu y places tous les caractères en une seule fois :

Code : Tout sélectionner

OpenFile(1,"Monfichier")
*Mem = AllocateMemory(Lof(1))
ReadData(*Mem,Lof(1))
CloseFile(1)
Puis tu lis chaque caractère de cet espace mémoire par la fonction PeekC(*Mem + postion du caractère ( 0 étant le premier 1 le second ...), tu modifies à comme tu l'entends ce caractère puis tu le remet à la plce du caractère initial avec la fonction inverse à la lescture PokeC(*Mem + postion du caractère) , tu lis le suivant ...

Code : Tout sélectionner

For n = 0 to Lof(1)-1
  Byte = PeekC(*Mem+n)
;ici le traitement pour modifier ton caractère
  PokeC(*Mem+n,Byte)
Next

Puis tu ecris en une seule fois les caractères modifiés qui sont en mémoire par la fonction WriteData(..)

Code : Tout sélectionner

OpenFile(1,"MonCrypte")
WriteData(1,*Mem,Lof(1))
CloseFile(1)
Teste sur un fichier d'un MegaOctet ou plus si tu veux tu veras que c'est presque instantané ! (et tout ceci pour deux accès disque au lieu de ... deux fois plus que de caractères à lire puis écrire !
Dernière modification par brossden le lun. 14/mai/2007 8:13, modifié 2 fois.
Denis

Bonne Jounée à tous
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

Ok je te remercie je vais regarder sa
Répondre