Crypter-décrypter un texte - texte crypté uniquement en majuscules - v2

Soyez le premier à donner votre avis sur cette source.

Vue 7 817 fois - Téléchargée 891 fois

Description

Reprend le sujet traité par DarKeenu (cryptage-décryptage à l'aide d'une clé)
La différence est que le texte crypté ne contient que des majuscules et est donc facilement transmissible autrement que par fichier interposé. Autrement le texte contient des caractères ANSI non "exprimables" (exemple ANSI 129) ou des caractères difficles à frapper (ex ANSI 199)

Source / Exemple :


Public Clef As String 'variable contenant la clé de cryptage/décryptage
Private Const ALPHAB As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Public Win As String
Public Wout As String

'Fonction de cryptage
Function Crypter(Texte As String, KK As String)
Dim CrypT As String 'var contenant la chaine résultat
Dim PosT As Long 'var contenant la position dans le texte
Dim PosK As Integer 'var contenant position active dans la clef

Dim i1 As Long 'indice de boucle
Dim i2 As Long 'indice de boucle
Dim i3 As Long

Dim temp As Long 'var temporaire

Dim ResT As Integer
Dim ResK As Integer
Dim ResS As Integer

Dim ANSID(512) As String

Dim TT As String * 1
Dim TK As String * 1
Dim CT As String * 2

' Remplir ANSID
ALPHA = ALPHAB
i1 = 1
i2 = 1

  While i1 < 27
    While i2 < 27
       ANSID(i3) = Mid(ALPHAB, i1, 1) + Mid(ALPHAB, i2, 1)
       i2 = i2 + 1
       i3 = i3 + 1
       If i3 = 513 Then GoTo ansifin
    Wend 'fin i2
    i2 = 1
    i1 = i1 + 1
  Wend ' fin i1

ansifin:
PosT = 1

While Not Texte = ""
    TT = Mid(Texte, 1, 1)
    If Len(Texte) = 1 Then Texte = "" Else Texte = Mid(Texte, 2)
    ' Lettre da clé
    PosK = PosT
    If PosK > Len(KK) Then PosK = PosT Mod Len(KK)
    If PosK = 0 Then PosK = Len(KK)
    TK = Mid(KK, PosK, 1)
    
    'Cryptage 1 caractère
    ResT = Val(Asc(TT))
    ResK = Val(Asc(TK))
    
    
    'Trouver la lettre texte
    ResS = ResT + ResK
    
    CT = ANSID(ResS)
   
    CrypT = CrypT + CT
    PosT = PosT + 1
Wend
   
FNHome.TxTIn = ""
FNHome.TxTOut = CrypT
FNHome.Show
FNHome.Enabled = True
       
End Function

'Fonction de décryptage
Function Décrypter(Texte As String, KK As String)
Dim CrypT As String 'var contenant la chaine résultat
Dim PosT As Long 'var contenant la position dans le texte
Dim PosK As Integer 'var contenant position active dans la clef

Dim i1 As Long 'indice de boucle
Dim i2 As Long 'indice de boucle
Dim i3 As Long

Dim temp As Long 'var temporaire

Dim ResT As Integer
Dim ResK As Integer
Dim ResS As Integer

Dim ANSID(512) As String

Dim TTc As String * 2
Dim TK As String * 1
Dim CTc As String * 1

' Remplir ANSID
ALPHA = ALPHAB
i1 = 1
i2 = 1

  While i1 < 27
    While i2 < 27
       ANSID(i3) = Mid(ALPHAB, i1, 1) + Mid(ALPHAB, i2, 1)
       i2 = i2 + 1
       i3 = i3 + 1
       If i3 = 513 Then GoTo ansifin
    Wend 'fin i2
    i2 = 1
    i1 = i1 + 1
  Wend ' fin i1

ansifin:
PosT = 1

While Not Texte = ""
    TTc = Mid(Texte, 1, 2)
    If Len(Texte) = 2 Then Texte = "" Else Texte = Mid(Texte, 3)
    ' Lettre dans la  clé
    PosK = PosT
    If PosK > Len(KK) Then PosK = PosT Mod Len(KK)
    If PosK = 0 Then PosK = Len(KK)
    TK = Mid(KK, PosK, 1)
    ResK = Val(Asc(TK))
    
    ' Lecture table ANSI D pour trouver TT
    i1 = 0
    While i1 < 513
    If ANSID(i1) = TTc Then GoTo ansiok
    i1 = i1 + 1
    Wend
ansiok:
    ResS = i1
    ResT = ResS - ResK
    
       
    CTc = Chr(ResT)
   
    CrypT = CrypT + CTc
    PosT = PosT + 1
Wend
   
FNHome.TxTIn = ""
FNHome.TxTOut = CrypT
FNHome.Show
FNHome.Enabled = True
       
    
        
End Function

Conclusion :


Le projet dans le zip permet de tester . Fonctionnement intuitif et simple.
A priori le but n'est pas d'utiliser tel quel mais d'intégrer les routines là où vous en avez besoin.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
vendredi 13 mai 2011
Statut
Membre
Dernière intervention
18 mai 2011

merci beaucoup frero,
Messages postés
13
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
2 décembre 2013

Le principe est simple :
1- Construire le tableau ANSID (512 postes de 2 caractères ) qui contient la séquence AA AB AC AD AE AF ... etc

2- Pour chaque caractère x à crypter :
2-1 Trouver la valeur n en code ASCII correspondante n=Val(Asc(x))
2-2 Soit p la position du caractère x dans le texte à crypter, rechercher le caractère k de même position dans la clef (en répétant le texte de la clef si la position p dépasse la longueur de la clef
2-3 n=n + Val(Asc(k))
2-4 si n> 511 alors n=reste de la division n/512
2-5 le caractère x crypté est alors égal au poste n de la table ANSID
Messages postés
2
Date d'inscription
vendredi 13 mai 2011
Statut
Membre
Dernière intervention
18 mai 2011

bonjour tt le monde pouvez vous m'aider a comprendre cet algorithme..merci beaucoup,,si ca vs dérange pas je veut un exemple .
Messages postés
13
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
2 décembre 2013

Etonnant mais je vais regarder.
En attendant le mieux pour crypter puis décrypter en texte c'est de procéder par copier-coller. Merci si possible de vérifier si le problème correspond bien à l'hypothèse que j'ai faite de façon à ce que, si besoin, je corrige tout d'un coup
Messages postés
13
Date d'inscription
dimanche 25 octobre 2009
Statut
Membre
Dernière intervention
28 mars 2011

Quant je fait mettre en haut ça met false
Afficher les 17 commentaires

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.