[débutants] cryptage, décryptage facile

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 386 fois - Téléchargée 16 fois

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

Ajouter un commentaire Commentaires
Messages postés
6
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
13 janvier 2013

Merci pour le script !
je me demande si on peut crypter en DES sans utilisé de vecteur d'initialisation ?
Messages postés
78
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
21 mars 2018
1
Merci, j'ai oubliée, le code source sera mis ajour
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Très bon exemple.

Par contre fais gaffe tu ne fermes pas tes flux (stream).

Utilises la methode ".Close" ou alors le mot clé "Using"

ex:

Public Function Encrypt(ByVal value As String) As String

Dim Resultat As String = ""

If (Not value.Equals("")) Then

Dim cryptoProvider As DESCryptoServiceProvider = New DESCryptoServiceProvider()

Using ms As MemoryStream = New MemoryStream()

Using cs As CryptoStream = New CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_64, IV_64), CryptoStreamMode.Write)

Using sw As StreamWriter = New StreamWriter(cs)

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

Resultat = Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)

End Using

End Using

End Using

End If

Return Resultat

End Function

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.