Module de cryptage vigenère

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 347 fois - Téléchargée 26 fois

Contenu du snippet

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 !

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2493
Date d'inscription
jeudi 14 juillet 2005
Statut
Contributeur
Dernière intervention
5 juin 2016
1
voilà, c'est corrigé !
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Salut, ce code est sans intérêt dans l'état.

For i = 1 To Len(s)
tmp1 = Asc(Mid(s, i, 1))
tmp2 = Asc(Mid(key, i, 1))
tmp3 = tmp3 & Chr(tmp1 + tmp2)
Next i

Si la longueur de la clé est inférieure à Len(s), on fait quoi ?
Si tmp1+tmp2>255 on fait quoi ?
As tu au moins testé ton code avant de poster ???

Et code non optimisé : long inutile car Byte suffit, manque les $...etc.
Ce serais la moindre des choses pour un truc si court !


Tu devrais corriger tout çà avant qu'un admin passe et le désactive ;)
(d'autant que ce type de code est déjà présent un grand nombre de fois)
@+

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.