Simple module d'encryption de texte en Vigenère.
Il est basé sur : Asc(lettre à crypter) + Asc(lettre clé) = Asc(lettre chiffrée)
Source / Exemple :
Option Explicit
Private Function CombienDeFoisMettreDedans(s As String, key As String) As Integer
'Verif de la longueur de la clé
If Len(s) > Len(key) Then
Dim newLen As Integer
newLen = Len(key) * (Len(s) / Len(key))
CombienDeFoisMettreDedans = newLen
Else
CombienDeFoisMettreDedans = 1
End If
End Function
Public Function VigenereEncrypt(s As String, key As String) As String
'Verif de la longueur de la clé
If Len(s) > Len(key) Then
Dim newLen As Integer
Dim newKey As String
Dim j As Integer
newLen = CombienDeFoisMettreDedans(s, key)
For j = 1 To newLen
newKey = newKey & key
Next j
key = newKey
End If
Dim i As Integer
Dim tmp1 As Integer, tmp2 As Integer, tmp3 As String
For i = 1 To Len(s)
tmp1 = Asc(Mid(s, i, 1))
tmp2 = Asc(Mid(key, i, 1))
If Not tmp1 + tmp2 > 255 Then
tmp3 = tmp3 & Chr(tmp1 + tmp2)
Else
tmp3 = tmp3 & "{?}"
End If
Next i
VigenereEncrypt = tmp3
End Function
Public Function VigenereDecrypt(s As String, key As String)
'Verif de la longueur de la clé
If Len(s) > Len(key) Then
Dim newLen As Integer
Dim newKey As String
Dim j As Integer
newLen = CombienDeFoisMettreDedans(s, key)
For j = 1 To newLen
newKey = newKey & key
Next j
key = newKey
End If
s = Replace(s, "{?}", "")
Dim i As Integer, tmp2 As Integer, tmp3 As String
For i = 1 To Len(s)
tmp1 = Asc(Mid(s, i, 1))
tmp2 = Asc(Mid(key, i, 1))
If tmp1 < tmp2 Then
tmp3 = tmp3 & "{?}"
Else
tmp3 = tmp3 & Chr(tmp1 - tmp2)
End If
Next i
VigenereDecrypt = tmp3
End Function
Conclusion :
Merci à SimonKari (URL du commentaire -
http://www.csharpfr.com/code.aspx?ID=25294) pour la formule !
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.