La fonction Vigénère() permet de crypter une chaîne de caractère de manière efficace.
Par rapport à d'autres techniques de cryptage, Vigénère apporte deux avantages:
Premier avantage
Un même caractère dans le texte peut être codé différemment: plus le code est long (cest-à-dire au moins aussi long que le texte à coder) et différencié (cest-à-dire avec le moins possible de caractère identique), plus il y a de chance pour que plusieurs mêmes caractères soit codés différemment.
Deuxième avantage
Il est impossible du moins à ma connaissance de décodé le texte codé sans le code. Essayez.
Source / Exemple :
Function Vigénère(S As String, Code As String, Encode As Boolean) As String
Dim i, j, s_Longueur, n As Integer
Dim s_codé As String
j = 1
s_Longueur = Len(S)
s_codé = ""
For i = 1 To s_Longueur
If Encode Then
n = Asc(Mid(S, i, 1)) + Asc(Mid(Code, j, 1)) + 1
Else
n = Asc(Mid(S, i, 1)) - Asc(Mid(Code, j, 1)) - 1
End If
If n > 255 Then n = n - 255
If n < 0 Then n = 255 + n
s_codé = s_codé + Chr(n)
j = j + 1
If j > Len(Code) Then j = 1
Next i
Vigénère = s_codé
End Function
Conclusion :
Pour de plus amples explications sur le fonctionnement de la fonction Vigénère, référrez-vous au fichier ZIP joint.
10 mai 2002 à 10:06
10 mai 2002 à 10:06
10 mai 2002 à 10:07
10 mai 2002 à 10:07
10 oct. 2007 à 10:52
If n > 255 Then n = n - 255
If n < 0 Then n = 255 + n
par :
If n > 255 Then n = n - 256
If n < 0 Then n = 256 + n
J'explique :
si le caractère a codé est "ÿ" (Asc(ÿ)=255) (et oui le pire je sais =)
et que le caractère de la clef est "ÿ"
le code sera égale à 255 + 255 + 1 = 511
donc n > 255 et si tu fais -255 => 511 - 255 = 256
et la, boulette, Chr(256) je vous laisse imaginer l'insulte de notre bon vieux debogeur.
=)
Pour le reste c'est nikel. Bonne source
Il y a possibilité aussi de le rendre plus performant en supprimant la concaténation, car il semblerait que l'instruction s_codé = s_codé + Chr(n) utilise beaucoup de ressource.
pour se faire tu crées une chaine de la taille de la chaine a crypter :
s_Longueur = Len(S)
s_codé = String(s_Longueur, Chr(0))
et à la place de s_codé = s_codé + Chr(n) tu mets :
Mid(s_codé, i, 1) = Chr(n)
Mais bon c'est pas vitale, c'est pour info
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.