Surfez vous êtes payé !

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.

Code
Commentaire/Explication

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.

 

Surfez vous êtes payé !

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 !

 

Surfez vous êtes payé !