Voilà la mise à jour que vous attendiez (je l'espère;) tant!
Ceci est le code (Visual Basic 5.00.D. Je sait que je vais me faire incendier:-() de Code+ 5.00.D. détaillé. Pour ce qui est du langage Basic, je m'active à y remédier avec mon futur Kubrick 1.0 qui lui sera en C++ (Borland C++ Builder 3) et si j'ai vraiment du courage, il y aura peut-être même une version Linux!
Autre chose... Si vous téléchargez Code+5.00.D (ou 5.01.D) ou que vous comptiez le faire, écrivez moi à cybkubrick@ifrance.com, juste pour avoir une idée du nombre de personnes l'ayant téléchargé, de créer une mailing-list (sauf si contre indication) et pour savoir si oui ou non je doit inclure le support du format de Code+ 5.00.D dans Kubrick.
N.B.: le code basic est dans le répertoire d'installation du logiciel.
N.B.2: Le texte long des boîtes de dialogue à parfois été abrége par "(...)", pour le retrouver dans son intégralité reportez vous au code disponible au téléchargement (à retrouver dans le répertoire où vous avez installé Code+)
N.B.3: Le code concernant l'affichage graphique n'est pas reporté ci-dessous.
N.B.4: Le code en vert concerne la procédure de cryptage en elle même et n'est pas détaillée, étant simple, vous ne devriez pas avoir bcp de problèmes pour la comprendre.
Private Sub
Command1_Click() Fonction de
l'événement Click sur le bouton Command1
(Crypter) Dim FileName(1) As String, FL As
Currency, HB(0 To 1024) As Byte, IB As Integer Dim Clef(0 To 255) As Byte, TL As
Byte Crée les variables qui
seront utilisées durant le processus de
cryptage: FileName(1) équivaut
à FileName(0 To 1) Qui contiendra en 0 le nom et
le chemin du fichier à cripter et en 1 le nom et le
chemein du fichier destination ; celui qui contiendra le
fichier crypté. FL contiendra la longueur du
fichiers en octets. HB(0 to 1024) servira de tampon
entre le processus et le disque dur en lisant et
écrivant le fichier par blocs de 1 Ko, ce
procédé accélère le processus
car le temps d'accès au fichier est long Clef(0 To 255) As Byte contiendra
la clef servant au cryptage. N.B.: D'autres variables seront
employées et déclarées de
manière implicite. (VisualBasic n'a pas que des
mauvais côtés... ;) On Error GoTo Fin: En cas d'erreur aller à
l'étiquette fin. FN0: CDO.DialogTitle =
"Sélec(...)" CDO.ShowOpen FileName(0) =
CDO.FileName FN0: | étiquette, son usage
sera détaillé plus loin. CDO (CommandDialog) est un objet VB
permettant l'affichage d'une boîte d'ouverture de
fichier standard de Windows. CDO.DialogTitle = | définit
le titre de la boîte de dialogue. CDO.ShowOpen | Affiche la
boîte de dialogue permettant ainsi à
l'utilisateur de choisir le fichier qu'il veut
crypter. FileName(0) = CDO.FileName |
Extrait le chemin et le nom du fichier que l'utilisateur
à choisi et le place dans la variable FileName
à la position 0 du tableau. If FileName(0) = "" Then Exit
Sub If Dir(FileName(1)) = "" Then Goto
FN0: Si CDO.FileName à
renvoyé une valeure nulle (représentée
par ""), c'est que l'utilisateur à cliqué sur
"annuler", donc Exit Sub termine ici la
procédure. Si le fichier
spécifié n'existe pas, on retourne à
l'étiquette FN0: qui redemande le nom de fichier
à l'utilisateur. FN1: CDO.DialogTitle = "Entrez le
nom(...)" CDO.ShowSave FileName(1) =
CDO.FileName If FileName(1) = "" Then
ExitSub Même chose que pour les deux
blocs précédents, masi cette fois-ci pour le
fichier de destination. If Dir(FileName(1)) = ""
Then Rep% =
MsgBox((...),
vbCritical + vbYesNo) If Rep% = vbYes Then Kill FileName(1) Else Goto FN1: End IF End If Si le fichier
spécifié par l'utilisateur existe
déjà, une boîte de message lui demande
s'il désire remplacer le fichier existant ou choisir
un autre nom de fichier. K0: Key =
InputBox((...)) If Key = "" Then Goto
K0: Text1.Text = Key FL =
FileLen(FileName(0)) InputBox | Demande la clef que
l'utilisateur souhaite utiliser. Si la clef est nulle, la
redemander. Text1.Text = Key | Place la clef
dans la zone de texte Text1, qui est invisible à
l'utilisateur. FL = FileLen(FileName(0)) | La
variabele FL doit contenir la longuerur du fichier à
crypter. On Error Resume Next En cas d'erreur, passe à
l'instruction suivante, cela peut vous paraître
étrange mais, si une éventuelle erreur se
produisait lors du cryptage (ce qui métonnerait fort
:-), elle se reproduirait au même endroit lors du
décriptage, sauf exeptions, alors. Open FileName(0) For Binary As
#1 Open FileName(1) For Binary As
#2 b% = -1 For c% = 0 To Len(Text1.Text) -
1 Text1.SelStart = c% Text1.SelLength = 1 Clef(c%) =
Asc(Text1.SelText) If c% = 255 Then Exit
For Next TL = Len(Text1.Text) Open ... For Binary as #X | Ouvre
les fichiers en mode binaire et leur assigne un n° X de
fichier. Cette boucle For...Next
décompose la clef en une suite de code ASCII et la
place dans le tableau de variable Clef%. Seuls les 256
premiers caractères sont pris en compte. TL Contient la longueure de la
clef. On peut noter qu'il y
à un bug! Car si la clef
exède 256 caractères, seuls ces 256 premiers
seront pris en compte dans Clef%(0 To 255) et l'utilisation
de TL provoquera un dépassement de tableau. Pour
pallier à ce problème il faut ajouter à
la ligne après "TL = Len(Text1.Text)" : If TL > 256 Then TL=
256 Et changer son type de
données en Integer par Ex. La nouvelle version de code+
(5.01.D) est déboguée et disponible au
téléchargement! For f@ = 1 To ((FL / 1024) + 1) *
1024 Step 1024 Get #1, f@, HB g@ = f@ + 1024 If g@ > FL Then g@ =
FL For a@ = f@ To g@ b% = b% + 1 If b% = TL Then b% = 0 IB = Clef(b%) IB = HB(a@ - f@) + IB If IB > 255 Then IB = IB -
256 HB(a@ - f@) = IB Next If g@ = FL Then For a@ = f@ To g@ Put #2, a@, HB(a@ - f@) Next Else Put #2, f@, HB End If Next Ce bout de code se charge de fair
danser une toride lambada au fichier. Close #1 Close #2 If Check1.Value = Checked Then Kill
FileName(0) Fin: End Sub Les Instructions "Close #X" ferment
les fichiers identifiés par X. Si la case à cocher
"Supprimer le fichier original", supprimer ce
fichier. Fin de la
procédure.
La commade de décryptage n'est pas détaillée car elle est presque identique et la procédure qui fait "danser la lambada à l'envers" :) correspond presque toujours à l'inversion des signes de la procédure de cryptage.
N'hésitez pas: cybkubrick@ifrance.com !