2011-12-16 1 views
8

Quelqu'un pourrait-il suggérer comment je peux obtenir un style de chiffrement de substitution? crypter et décrypter la fonction dans VBA. J'apprécie que le hachage soit considéré comme le meilleur moyen mais j'ai besoin d'un cryptage réversible. Merci beaucoup.MS Access Chiffrement de substitution VBA Crypter/Déchiffrer

+0

Vous n'en avez pas déjà un [que vous avez essayé de publier] (http://stackoverflow.com/questions/8534659/vba-ms-access-substitution-cipher)? – Deanna

+0

@Deanna Comme Jean l'a dit je l'ai posté plus tôt, mais ignoré les règles de débordement de la pile im désolé de le dire, c'est mieux car les gens offrent des réponses et d'autres peuvent le trouver dans le futur par une recherche google –

Répondre

2

Un grand merci pour toutes les réponses fournies en référence à ma question, c'est bien de voir qu'il y a différentes approches, j'en ai codé une hier matin. Il permet d'utiliser un mot-clé/une expression de chiffrement différent pour les deux lettres &. J'ai utilisé des 'Zebras' dans cet exemple, et un second passage avec le chiffre ROT13. Méthode de chiffrement:

Public Function Encrypt(strvalue As String) As String 

Const LowerAlpha As String = "abcdefghijklmnopqrstuvwxyz" 
Const LowerSub  As String = "zebrascdfghijklmnopqtuvwxy" 'zebras 
Const UpperAlpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
Const UpperSub  As String = "ZEBRASCDFGHIJKLMNOPQTUVWXY" 'ZEBRAS 

Dim lngi   As Long 
Dim lngE   As Long 
Dim strEncrypt  As String 
Dim strLetter  As String 

If strvalue & "" = "" Then Exit Function 

For lngi = 1 To Len(strvalue) 

    strLetter = Mid(strvalue, lngi, 1) 

    Select Case Asc(strLetter) 

     Case 65 To 90 'Uppercase 
      'Find position in alpha string 
      For lngE = 1 To Len(UpperAlpha) 
       If Mid(UpperAlpha, lngE, 1) = strLetter Then GoTo USub 
      Next 
USub: 
      strEncrypt = strEncrypt & Mid(UpperSub, lngE, 1) 

     Case 97 To 122 'Lowercase 
      'Find position in alpha string 
      For lngE = 1 To Len(LowerAlpha) 
       If Mid(LowerAlpha, lngE, 1) = strLetter Then GoTo LSub 
      Next 
LSub: 
      strEncrypt = strEncrypt & Mid(LowerSub, lngE, 1) 

     Case Else 'Do not substitute 

      strEncrypt = strEncrypt & strLetter 

    End Select 

Next 

'Now pass this string through ROT13 for another tier of security 

For lngi = 1 To Len(strEncrypt) 
    Encrypt = Encrypt & Chr(Asc(Mid(strEncrypt, lngi, 1)) + 13) 
Next 

End Function 

Et c'est le Decryption qui va avec:

Public Function Decrypt(strvalue As String) As String 

Const LowerAlpha As String = "abcdefghijklmnopqrstuvwxyz" 
Const LowerSub  As String = "zebrascdfghijklmnopqtuvwxy" 'zebras 
Const UpperAlpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
Const UpperSub  As String = "ZEBRASCDFGHIJKLMNOPQTUVWXY" 'ZEBRAS 

Dim lngi   As Long 
Dim lngE   As Long 
Dim strDecrypt  As String 
Dim strLetter  As String 

If strvalue & "" = "" Then Exit Function 

'Reverse the ROT13 cipher 

For lngi = 1 To Len(strvalue) 
    strDecrypt = strDecrypt & Chr(Asc(Mid(strvalue, lngi, 1)) - 13) 
Next 

'Now reverse the encryption 

For lngi = 1 To Len(strDecrypt) 

    strLetter = Mid(strDecrypt, lngi, 1) 

    Select Case Asc(strLetter) 

     Case 65 To 90 'Uppercase 
      'Find position in sub string 
      For lngE = 1 To Len(UpperSub) 
       If Mid(UpperSub, lngE, 1) = strLetter Then GoTo USub 
      Next 
USub: 
      Decrypt = Decrypt & Mid(UpperAlpha, lngE, 1) 

     Case 97 To 122 'Lowercase 
      'Find position in sub string 
      For lngE = 1 To Len(LowerSub) 
       If Mid(LowerSub, lngE, 1) = strLetter Then GoTo LSub 
      Next 
LSub: 
      Decrypt = Decrypt & Mid(LowerAlpha, lngE, 1) 

     Case Else 'Do not substitute 

      Decrypt = Decrypt & strLetter 

    End Select 

Next 

End Function 

J'espère que le codage est très simple à suivre pour ceux qui n'ont pas une grande expérience avec le codage VBA et il peut être soulevé directement de la page; mais encore merci pour toutes les autres réponses.

+0

C'est très faible (excuse de) un cryptage ridicule. Essayez quelque chose de plus fort comme RC4 qui peut être implémenté dans moins de lignes de code. Voir ici: http://stackoverflow.com/questions/7025644/vb6-encrypt-text-using-password – wqw

+1

J'apprécie Sub Ciphers sont assez vieux maintenant et pas considéré comme le meilleur, mais j'avais juste besoin de quelque chose de simple pour cette affaire, vous avez pour admettre cependant, cette chaîne cryptée a l'air plutôt cool "S € 4 -XY^-x, ~ -zRrur € r | - € pz -px" - "px-" | - ~ | zVV † -z ~ | 9- r € -r - =, ~ -p => | " Si quelqu'un a le temps de le décrypter, j'aimerais voir à quel point c'est facile. :) –

2

Il est un exemple simple here ou vous pouvez utiliser le chiffrement ROT13 encore plus simple. Ils sont utiles pour masquer un petit texte, mais je ne les utiliserais pas pour tout ce qui doit être gardé en sécurité.