Besoin d'aide !

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Besoin d'aide !

Message par AWEAR »

Voila j'ai créer un programme censé crypter des fichiers et un autre pour les décrypter, seulement le problème est que lorsque je décrypte, les "q" sont effacés....
par exemple : messagerequester() devient ==> messagereuester()
Voici les codes que j'utilise :
pour coder :

Code : Tout sélectionner

Enumeration
#fichier
EndEnumeration
NewList liste.s()
NewList liste2.s()
NewList liste3.s()
NewList liste4.s()
Dim tableau.s(254, 254) ; tableau contenant tout les caractères possibles, (sans ""), en décalant les caractère de une place à chaque ligne
Procedure.s fichier_en_texte(fichier_a_utiliser$); récupère le texte du fichier ouver
If OpenFile(#fichier, fichier_a_utiliser$)
*buffer = AllocateMemory(Lof())
ReadData(*buffer, Lof())
CloseFile(#fichier)
ProcedureReturn PeekS(*buffer); renvoi le texte si le fichier existe
Else
ProcedureReturn ""; ne renvoi rien sinon
EndIf
EndProcedure
Procedure.s coder(code$); permet de supprimer tous les caractères déja existant dans le code
If code$
longueur = Len(code$)
Repeat 
vrai_code$ = vrai_code$ + Mid(code$, 1, 1); creer le nouveau mot de passe
code$ = RemoveString(code$, Right(vrai_code$, 1)); supprime les caractère déja utilisés
until code$ = ""
ProcedureReturn vrai_code$; si un code est entré, renvoi le code simplifié
Else
ProcedureReturn ""; ne renvoi rien si il n'y a pas de code
EndIf
EndProcedure
Procedure creer_la_liste(code$) ; crée une liste commencant par les lettres du code simplifié, puis qui se termine par le reste des caractères
ClearList(liste())
For place = 1 To Len(code$)
AddElement(liste()); ajoute un élément a la liste
liste() = Mid(code$, place, 1); place un caractère du code correspondant à place
Next
For caractere = 0 To 254; pour chaque caractère exepté ""
existe = #False
ForEach liste(); on regarde dans la liste
If liste() = Chr(caractere + 1); si le caractère existe déja (déja dans le code)
existe = #True
EndIf
Next
If existe = #False; si le caractère n'existe pas
AddElement(liste());on ajoute un élément
liste() = Chr(caractere + 1); qui a pour valeur caractere + 1
EndIf
Next
EndProcedure
Procedure.s code_alphabet(fichier_sous_forme_de_string$, code$); permet de crypter le fichier en utilisant la liste liste()
ClearList(liste2())
For coder = 0 To Len(fichier_sous_forme_de_string$) - 1;  pour chaque caractere de fichier_sous_forme_de_string$
SelectElement(liste(), Asc(Mid(fichier_sous_forme_de_string$, coder + 1, 1)) - 1); on choisi l'élément de la liste qui corresponderait si la liste était un tableau ASCII
AddElement(liste2()); on ajoute un élément a liste2()
liste2() = liste(); l'élément correspond à l'emplacement de liste() sélectionné
Next
ForEach liste2(); pour chaque élément de liste2()
textecodefinal$ = textecodefinal$ + liste2(); on ajoute sa valeur a textecodefinal$ 
Next
ProcedureReturn textecodefinal$;  renvoit textecodefinal$ 
EndProcedure
Procedure faire_le_tableau(); prépare le tableau avec tous les caractères sauf ""
For tableau_x = 0 To 254; pour chaque colone du tableau
caractere + 1 ; le premier caractère de la ligne à créer est décalé de 1
For tableau_y = 0 To 254; pour chaque ligne du tableau
If tableau_y + caractere > 255; si le numéro ASCII du caractère à inscrire est plus grand que 255
aide = tableau_y + caractere - 255; on enlève 255 pour qu'il devienn valable
Else
aide = tableau_y + caractere; sinon on marque juste le numéro
EndIf
tableau(tableau_x, tableau_y) = Chr(aide); on inscrit le caractère dans le tableau
Next
Next
EndProcedure
Procedure.s code_tableau(fichier_deja_code$, code$); on code en utilisant le tableau
ClearList(liste3())
For code = 1 To Len(code$); pour chaque caractère du code
AddElement(liste3()); on ajoute un élément à liste3()
liste3() = Mid(code$, code, 1); qui a pour valeur le caractère du code
Next
SelectElement(liste3(), 0); on remet la liste3() à 0
For x = 1 To Len(fichier_deja_code$); pour chaque caractère du fichier à coder
If ListIndex(liste3()) = - 1 ; si il n'y a plus d'élément dans la liste3()
SelectElement(liste3(), 0); on remet liste3() à 0
EndIf
NextElement(liste3());sinon on prend l'élément suivant
For z = 0 To 254; pour chaque caractère possible
If tableau(z, Asc(liste3()) - 1) = Mid(fichier_deja_code$, x, 1); si la valeur du tableau à la ligne du caractère courant du code, et à la colone z est égal au caractère du fichier 
AddElement(liste4()); on ajoute un élément à liste4()
liste4() = tableau(z, 0); on applique comme valeur la valeur de la ligne 0 du tableau et de la même colonne (z)
EndIf
Next
Next
ForEach liste4(); pour chaque élément de liste4() et donc du fichier codé
resultat$ = resultat$ + liste4(); on ajoute la valeur de liste4() à resultat$
Next
ProcedureReturn resultat$; retourne le fichier codé
EndProcedure
Procedure creer_le_fichier_code(fichier_a_utiliser$, code$, adresse_du_fichier_code_a_creer$); procédure qui crée le fichier
creer_la_liste(coder(code$)); crée la liste correspondant au code entré
faire_le_tableau(); crée le tableau
code_tableau(code_alphabet(fichier_en_texte(fichier_a_utiliser$), coder(code$)), code$); code le fichier en utilisant code_alphabet() puis code en utilisant code_tableau()
CreateFile(#fichier, adresse_du_fichier_code_a_creer$); crée le fichier codé
ForEach liste4(); pour chaque élément de liste4() et donc caractère du fichier codé
WriteString(liste4()); écrit cet élément dans le fichier créé
Next
EndProcedure
fichier_cible$ = OpenFileRequester("Ouvrir le fichier a crypter", GetSpecialFolderLocation(5), "Tout type de fichier | *.*", 0)
code_a_utiliser$ = InputRequester("Code à utiliser", "Veuillez entrer le code", "")
nom_de_fichier$ = SaveFileRequester("Créer un fichier crypté", GetSpecialFolderLocation(5), "Fichier .crypt | *.crypt", 0)
If fichier_cible$ And code_a_utiliser$ And nom_de_fichier$
nom_de_fichier$ + "." + GetExtensionPart(fichier_cible$) + ".crypt"
creer_le_fichier_code(fichier_cible$, code_a_utiliser$, nom_de_fichier$)
EndIf
et pour décoder :

Code : Tout sélectionner

Enumeration
#fichier
EndEnumeration
NewList liste.s()
NewList liste2.s()
NewList liste3.s()
NewList liste4.s()
Dim tableau.s(253, 253)
Procedure.s fichier_en_texte(fichier_a_utiliser$)
If OpenFile(#fichier, fichier_a_utiliser$)
Repeat
x = Len(fichier_en_texte$)
fichier_en_texte$ = fichier_en_texte$ + ReadString()
Until Len(fichier_en_texte$) = x
CloseFile(#fichier)
ProcedureReturn fichier_en_texte$
Else
ProcedureReturn ""
EndIf
EndProcedure
Procedure.s coder(code$)
If code$
longueur = Len(code$)
For place = 1 To longueur
vrai_code$ = vrai_code$ + Mid(code$, 1, 1)
code$ = RemoveString(code$, Right(vrai_code$, 1))
Next
ProcedureReturn vrai_code$
Else
ProcedureReturn ""
EndIf
EndProcedure
Procedure creer_la_liste(code$)
ClearList(liste())
For place = 1 To Len(code$)
AddElement(liste())
liste() = Mid(code$, place, 1)
Next
For caractere = 0 To 254
existe = #False
ForEach liste()
If liste() = Chr(caractere + 1)
existe = #True
EndIf
Next
If existe = #False
AddElement(liste())
liste() = Chr(caractere + 1)
EndIf
Next
EndProcedure
Procedure.s code_alphabet(fichier_sous_forme_de_string$, code$)
ClearList(liste2())
For coder = 0 To Len(fichier_sous_forme_de_string$) - 1
ForEach liste()
If liste() = Mid(fichier_sous_forme_de_string$, coder + 1, 1)
AddElement(liste2())
liste2() = Chr(ListIndex(liste()) + 1)
EndIf
Next
Next
ForEach liste2()
textecodefinal$ = textecodefinal$ + liste2()
Next
ProcedureReturn textecodefinal$
EndProcedure
Procedure faire_le_tableau()
For tableau_x = 0 To 253
caractere + 1
For tableau_y = 0 To 253
If tableau_y + caractere > 253
aide = tableau_y + caractere - 253
Else
aide = tableau_y + caractere
EndIf
tableau(tableau_x, tableau_y) = Chr(aide)
Next
Next
EndProcedure
Procedure.s code_tableau(fichier_deja_code$, code$)
ClearList(liste3())
For code = 1 To Len(code$)
AddElement(liste3())
liste3() = Mid(code$, code, 1)
Next
SelectElement(liste3(), 0)
For x = 1 To Len(fichier_deja_code$)
If ListIndex(liste3()) = - 1
SelectElement(liste3(), 0)
EndIf
NextElement(liste3())
AddElement(liste4())
liste4() = tableau(Asc(Mid(fichier_deja_code$, x, 1)) - 1, Asc(liste3()) - 1)
Next
ForEach liste4()
resultat$ = resultat$ + liste4()
Next
ProcedureReturn resultat$
EndProcedure
Procedure.s creer_le_fichier_decode(fichier_a_utiliser$, code$, adresse_du_fichier_code_a_creer$)
creer_la_liste(coder(code$))
faire_le_tableau()
code_alphabet(code_tableau(fichier_en_texte(fichier_a_utiliser$), code$), coder(code$))
CreateFile(#fichier, adresse_du_fichier_code_a_creer$)
ForEach liste2()
WriteString(liste2())
Next
EndProcedure
fichier_cible$ = OpenFileRequester("Ouvrir le fichier a décrypter", GetSpecialFolderLocation(5), "Fichier .crypt | *.crypt", 0)
code_a_utiliser$ = InputRequester("Code à utiliser", "Veuillez entrer le code", "")
nom_de_fichier$ = SaveFileRequester("Créer un fichier décrypté", GetSpecialFolderLocation(5), "fichier|*.txt" , 0)
If fichier_cible$ And code_a_utiliser$ And nom_de_fichier$
nom_de_fichier$ + "." + GetExtensionPart(Left(fichier_cible$, Len(fichier_cible$)  - 6))
creer_le_fichier_decode(fichier_cible$, code_a_utiliser$, nom_de_fichier$)
EndIf
Où est le probleme dans ce code ?
Dernière modification par AWEAR le ven. 02/déc./2005 13:53, modifié 2 fois.
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

C'est pas si grave, et puis de nos jours, beaucoup trop de personnes pensent au q; alors qu'il y en ai moins n'est pas si mal!
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tu pourrais peut-être commencer par mettre des explications dans ton code, juste pour faciliter le travail
olivier
Messages : 305
Inscription : mer. 05/janv./2005 12:58
Localisation : http://www.tib-net.com/meca/index.htm

Message par olivier »

J'ai essayer chez moi et il me garde les q !!!
Mais lorsque je lui est balancer un gros fichier il n'a rien sortie.

Bref il faut que tu cherche un peu plus.
Pour cela, au lieu d'écrire :
creer_la_liste(coder(code$))
ecris
new_code$=coder(code$)
debug new_code$
creer_la_liste(new_code$)

Si tu fais cela dans toutes les parties de ton prog tu trouvera plus vite le problème.

Dans ta procedure coder tu fait une boucle
For place = 1 To longueur
vrai_code$ = vrai_code$ + Mid(code$, 1, 1)
code$ = RemoveString(code$, Right(vrai_code$, 1))
Next
Et tu ne te sert pas de place ?

Bon courage
Vive le temps libre !
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

Voilà je viens de rajouter les commentaires au code utilisé pour crypter, le principe étant le même pour décrypter. J'ai trouvé que le code ne supprimait pas spécifiquement les "q", mais qu'il supprimait quand même une lettre qui dépend du mot de passe que on utilise.
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
Répondre