[débutants] cryptage, décryptage facile

Contenu du snippet

Ce bout de code vous permet de crypter et/ou décrypter un text en utilisant l'algo Data Encryption Standard (DES) et le trileDES.
Le code source est adapté pour les débutants.

Source / Exemple :


Imports System.Diagnostics
Imports System.Security.Cryptography
Imports System.Text
Imports System.IO

Public Class CryptoUtil
    '8 octets selectionnes aleatoirement pour la clé et le vecteur d'initilisation 
    'Le vecteur d'initilisation IV est utilisé pour crypter la premiere partie du block de texte.

    ' La clé et le vecteur d'initialisation de taille 64 Bits sont statiques.
    Private Shared KEY_64() As Byte = {42, 16, 93, 156, 78, 4, 218, 32}
    Private Shared IV_64() As Byte = {55, 103, 246, 79, 36, 99, 167, 3}
    'la clé et le vecteur d'initialisation de taille 192 bits sont utilisés si l'algo TripleDES est utilisé
    Private Shared KEY_192() As Byte = {42, 16, 93, 156, 78, 4, 218, 32, _
            15, 167, 44, 80, 26, 250, 155, 112, _
            2, 94, 11, 204, 119, 35, 184, 197}
    Private Shared IV_192() As Byte = {55, 103, 246, 79, 36, 99, 167, 3, _
            42, 5, 62, 83, 184, 7, 209, 13, _
            145, 23, 200, 58, 173, 10, 121, 222}
 '---------------------------------------------------------------
 'NB: On a choisit la clé et le VI, cela n'est pas idéale dans 
      'les applications réelle car au moin la clé doit etre 
      'privée (secrete) et générer automatiquement(depuis un    
      'texte). mais pour des buts de simplicité on a pris la clé 
      'et le VI manuellement.
 '---------------------------------------------------------------
 ' Fonction de cryptage
 ' Reçoit le texte a crypter
    Public Shared Function Encrypt(ByVal value As String) As String
        If value <> "" Then 
            'il faut creer le fournisseur qui sera utilisé dans la phase de cryptage.
            'Ici, on a choisit le Fournisseur DES
            Dim cryptoProvider As DESCryptoServiceProvider = _
                New DESCryptoServiceProvider()
            'Buffer contenant le text crypté.
            Dim ms As MemoryStream = New MemoryStream()
            'Buffer utilisé pour les opérations de cryptage. 
            Dim cs As CryptoStream = _
                New CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_64, IV_64), _
                    CryptoStreamMode.Write)
            Dim sw As StreamWriter = New StreamWriter(cs)
            'Ecriture du texte dans le buffer de cryptage
            sw.Write(value)
            'Cryptage
            sw.Flush()
            cs.FlushFinalBlock()
            'Actualisation
            ms.Flush()

            'Retourne le texte crypté.
            Return Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)
        End If
    End Function
'Maintenant avec l'opération inverse et toujour avec le mode DES
    Public Shared Function Decrypt(ByVal value As String) As String
        If value <> "" Then
            Dim cryptoProvider As DESCryptoServiceProvider = _
                New DESCryptoServiceProvider()

            'Conversion du texte a décrypté vers un vecteur d'octets
            Dim buffer As Byte() = Convert.FromBase64String(value)
            Dim ms As MemoryStream = New MemoryStream(buffer)
            Dim cs As CryptoStream = _
                New CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_64, IV_64), _
                    CryptoStreamMode.Read)
            Dim sr As StreamReader = New StreamReader(cs)

            Return sr.ReadToEnd()
        End If
    End Function
'--------------------------------------------------------------
'Maintenant avec l'algo TripleDES
Public Shared Function EncryptTripleDES(ByVal value As String) As String
        If value <> "" Then
            'Ici le changement qui se pose.
            Dim cryptoProvider As TripleDESCryptoServiceProvider = _
                New TripleDESCryptoServiceProvider()
            Dim ms As MemoryStream = New MemoryStream()
            Dim cs As CryptoStream = _
                New CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_192, IV_192), _
                    CryptoStreamMode.Write)
            Dim sw As StreamWriter = New StreamWriter(cs)

            sw.Write(value)
            sw.Flush()
            cs.FlushFinalBlock()
            ms.Flush()

            Return Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)
        End If
    End Function

    Public Shared Function DecryptTripleDES(ByVal value As String) As String
        If value <> "" Then
            Dim cryptoProvider As TripleDESCryptoServiceProvider = _
                New TripleDESCryptoServiceProvider()

            Dim buffer As Byte() = Convert.FromBase64String(value)
            Dim ms As MemoryStream = New MemoryStream(buffer)
            Dim cs As CryptoStream = _
                New CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_192, IV_192), _
                    CryptoStreamMode.Read)
            Dim sr As StreamReader = New StreamReader(cs)

            Return sr.ReadToEnd()
        End If
    End Function

End Class

Conclusion :


Pour plus d'informations, vous trouvez un tres bon article (théorie) sur la wiki ici
http://en.wikipedia.org/wiki/Data_Encryption_Standard
http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

A voir également

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.