begin process at 2012 02 14 13:39:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité

 > CRYPTAGE/DECRYPTAGE DE FICHIER AVEC AES

CRYPTAGE/DECRYPTAGE DE FICHIER AVEC AES


 Information sur la source

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité Source .NET ( DotNet ) Classé sous :AES, AesCryptoServiceProvider, CreateEncryptor, Cryptage, CreateDecryptor Niveau :Initié Date de création :06/11/2008 Date de mise à jour :18/12/2008 16:48:34 Vu / téléchargé :9 750 / 890

Auteur : elguevel

Ecrire un message privé
Site perso
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Je cherchais en ce moment, pour un projet, à faire du cryptage et décryptage de fichier.
Je voulais utiliser AES pour cela, et après beaucoup de recherche j ai trouvé de tout sauf une source qui implémentait AES en vb.Net.

J'ai utilisé pour cela AesCryptoServiceProvider()

Le programme comprend un exemple simple avec une classe pour la cryptographie, contenant des méthodes de cryptage et décryptage de fichier et de texte a la volée.

Il y a également une méthode permettant de generer les clés de AesCryptoServiceProvider via une clé texte "Simple".

Source

  • Imports System.IO
  • Imports System.Text
  • Imports System.Security
  • Imports System.Security.Cryptography
  • Imports System.Runtime.Serialization.Formatters
  • ' ------------------------------------------------------------------
  • ' Classe de cryptage et decryptage avec AES
  • ' Ecrit par LEVEUGLE Damien
  • ' Elguevel software (c) 2008
  • ' http://elguevel.free.fr
  • ' ------------------------------------------------------------------
  • Public Class ElgAESCrypt
  • #Region "Attributs"
  • Private _UserKey As String ' Cle entrée parl'utilisateur (en toute lettre)
  • Private _SecretKey(15) As Byte ' Cle secrete sur 128 bits generer par la fonction "GenereCle"
  • Private _SecretIV(15) As Byte ' Vecteur d'initialisation sur 128 bits generer par par la fonction "GenereCle"
  • #End Region
  • #Region "Proprietés"
  • ''' <summary>
  • ''' Cle secrete generée par la fonction <c>GenereCle</c>
  • ''' </summary>
  • ''' <returns>Renvoi un tableau de Byte du vecteur</returns>
  • ''' <remarks>Non utilisé ici, mais permet à l'utilisateur de pouvoir la récupérer si besoin</remarks>
  • Public Property Key() As Byte()
  • Get
  • Return _SecretKey
  • End Get
  • Set(ByVal value As Byte())
  • _SecretKey = value
  • End Set
  • End Property
  • ''' <summary>
  • ''' Vecteur d'initialisation generé par la fonction <c>GenereCle</c>
  • ''' </summary>
  • ''' <returns>Renvoi un tableau de Byte de la cle</returns>
  • ''' <remarks>Non utilisé ici, mais permet à l'utilisateur de pouvoir la récupérer si besoin</remarks>
  • Public Property IV() As Byte()
  • Get
  • Return _SecretIV
  • End Get
  • Set(ByVal value As Byte())
  • _SecretIV = value
  • End Set
  • End Property
  • #End Region
  • #Region "Methodes"
  • ''' <summary>
  • ''' La methode créée un hashage SHA de la cle entrée par l'utilisateur et recupère les 15 premier byte
  • ''' et les entre ensuite comme cle (Key) et vecteur d'initialisation (IV), ce qui augmente encore la
  • ''' sécurité du cryptage d'un cran, et facilite l'uilisation de la classe de cryptage (1 seule cle).
  • ''' </summary>
  • ''' <param name="strKey">Cle entrée par l'utilisateur</param>
  • ''' <returns>Information permettant de savoir si la procedure a fonctionné</returns>
  • ''' <remarks></remarks>
  • Private Function GenereCle(ByVal strKey As String) As Boolean
  • Dim Resultat As Boolean = False
  • Try
  • ' Conversion de la clé utilisateur en tableau de byte
  • Dim ByteKey(strKey.Length - 1) As Byte
  • Dim aEnc As New UTF8Encoding
  • aEnc.GetBytes(strKey, 0, strKey.Length, ByteKey, 0)
  • 'Hashage de la clé en utilisant SHA1
  • Dim ServiceSHA As New SHA1CryptoServiceProvider
  • Dim Hashage() As Byte = ServiceSHA.ComputeHash(ByteKey)
  • ' Creation de la clé pour la valeur "Key" en prenant les 16 premier
  • ' caractere du hashage
  • For I As Integer = 0 To 15
  • _SecretKey(I) = Hashage(I)
  • Next I
  • ' Creation de la clé pour la valeur "IV" en prenant les 16 premier
  • ' caractere du hashage, mais en les plaçant dans le sens inverse
  • For j As Integer = 15 To 0 Step -1
  • _SecretIV(15 - j) = Hashage(j)
  • Next
  • Resultat = True
  • Catch e As Exception
  • Resultat = False
  • End Try
  • Return Resultat
  • End Function
  • ''' <summary>
  • ''' Encrypte un fichier dans un autre
  • ''' </summary>
  • ''' <param name="sInputFilename">Fichier non crypter</param>
  • ''' <param name="sOutputFilename">Fichier crypter</param>
  • ''' <remarks></remarks>
  • Public Sub EncrypterFichier(ByVal sInputFilename As String, ByVal sOutputFilename As String)
  • If Not (File.Exists(sInputFilename)) Then
  • Throw New Exception("Vous devez specifier un fichier d'entrée existant !")
  • End If
  • Dim AES As New AesCryptoServiceProvider()
  • Dim AesDecrypt As ICryptoTransform = AES.CreateEncryptor(_SecretKey, _SecretIV)
  • Using fsInput As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read, FileShare.Read)
  • ' Flux d'entree
  • Using fsOutput As New FileStream(sOutputFilename, FileMode.Create, FileAccess.Write, FileShare.None)
  • ' Flux de transformation qu'on rattache au flux de sortie
  • Using cryptostream As New CryptoStream(fsOutput, AesDecrypt, CryptoStreamMode.Write)
  • ' Ecrit flux d'entre dans un tableau d'octet
  • Dim bytearrayinput(fsInput.Length - 1) As Byte
  • Dim bytesRead As Long = 0
  • bytesRead = fsInput.Read(bytearrayinput, 0, fsInput.Length)
  • If Not (bytesRead = 0) Then
  • ' Crypte tableau d'octet en ecrivant sur le flux de transformation (sortie)
  • cryptostream.Write(bytearrayinput, 0, bytesRead)
  • cryptostream.Flush()
  • End If
  • End Using
  • End Using
  • End Using
  • End Sub
  • ''' <summary>
  • ''' Decrypte un fichier crypté dans un autre
  • ''' </summary>
  • ''' <param name="sInputFilename">Fichier crypté</param>
  • ''' <param name="sOutputFilename">Fichier non crypté</param>
  • ''' <remarks></remarks>
  • Public Sub DecrypterFichier(ByVal sInputFilename As String, ByVal sOutputFilename As String)
  • If Not (File.Exists(sInputFilename)) Then
  • Throw New Exception("Vous devez specifier un fichier d'entrée existant !")
  • End If
  • Dim AES As New AesCryptoServiceProvider()
  • Dim AesDecrypt As ICryptoTransform = AES.CreateDecryptor(_SecretKey, _SecretIV)
  • Using fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read, FileShare.Read)
  • Using cryptostreamDecr As New CryptoStream(fsread, AesDecrypt, CryptoStreamMode.Read)
  • Using fsDecrypted As New FileStream(sOutputFilename, FileMode.Create, FileAccess.Write, FileShare.None)
  • Dim bytearrayinput(fsread.Length) As Byte
  • Dim bytesRead As Long = 0
  • bytesRead = cryptostreamDecr.Read(bytearrayinput, 0, fsread.Length)
  • If (bytesRead > 0) Then
  • fsDecrypted.Write(bytearrayinput, 0, bytesRead)
  • fsDecrypted.Flush()
  • End If
  • End Using
  • End Using
  • End Using
  • End Sub
  • ''' <summary>
  • ''' Encrypte une chaine de texte
  • ''' </summary>
  • ''' <param name="Chaine">Chaine en clair</param>
  • ''' <returns>Chaine cryptée</returns>
  • ''' <remarks></remarks>
  • Public Function EncrypterChaine(ByVal Chaine As String) As String
  • ' Objets AES
  • Dim AES As New AesCryptoServiceProvider()
  • Dim AesDecrypt As ICryptoTransform = AES.CreateEncryptor(_SecretKey, _SecretIV)
  • ' Buffer de stockages
  • Dim BufferEntree() As Byte
  • ' Chaine tampon pour stocker resultat final
  • Dim ChaineSortie As String = String.Empty
  • ' On place la chaine en claire dans le buffer d'entrée
  • BufferEntree = Encoding.ASCII.GetBytes(Chaine.ToCharArray)
  • ' Flux de travail
  • Dim msSortie As New MemoryStream()
  • ' Flux de transformation (lié au flux msInput)
  • Dim cryptostream As New CryptoStream(msSortie, AesDecrypt, CryptoStreamMode.Write)
  • ' On ecrit la chaine (en claire) du buffer d'entrée dans le flux de sortie (qui sera transformé au passage)
  • cryptostream.Write(BufferEntree, 0, BufferEntree.Length)
  • cryptostream.FlushFinalBlock()
  • ' On stocke resultat avant de fermer les flux
  • ChaineSortie = Convert.ToBase64String(msSortie.ToArray)
  • ' On ferme les flux
  • msSortie.Close()
  • cryptostream.Close()
  • Return ChaineSortie
  • End Function
  • ''' <summary>
  • ''' Decrypte une chaine de texte
  • ''' </summary>
  • ''' <param name="ChaineCrypte">Chaine cryptée</param>
  • ''' <returns>Chaine décryptée</returns>
  • ''' <remarks></remarks>
  • Public Function DecrypterChaine(ByVal ChaineCrypte As String) As String
  • ' Objets AES
  • Dim AES As New AesCryptoServiceProvider()
  • Dim AesDecrypt As ICryptoTransform = AES.CreateDecryptor(_SecretKey, _SecretIV)
  • ' Buffers de stockage
  • Dim BufferEntree() As Byte ' Buffer contenant la chaine d'entrée
  • Dim BufferSortie() As Byte ' Buffer contenant la chaine de sortie
  • ' On convertie la chaine crypter pour la placer dans le buffer
  • BufferEntree = Convert.FromBase64String(ChaineCrypte)
  • ' On dimenssione le buffer de sortie
  • ReDim BufferSortie(BufferEntree.Length)
  • ' Flux d'entree qu'on rattache au buffer d'entrée
  • Dim msInput As New MemoryStream(BufferEntree)
  • ' Flux de transformation qu'on rattache au flux d'entrée
  • Dim cryptostream As New CryptoStream(msInput, AesDecrypt, CryptoStreamMode.Read)
  • ' On ecrit le resultat decrypté dans le buffer de sortie
  • cryptostream.Read(BufferSortie, 0, BufferSortie.Length)
  • ' On ferme les flux
  • msInput.Close()
  • cryptostream.Close()
  • ' Retourne la chaine resultante
  • Return Encoding.ASCII.GetString(BufferSortie)
  • End Function
  • #End Region
  • #Region "Constructeur"
  • ''' <summary>
  • ''' Constructeur par defaut
  • ''' </summary>
  • ''' <param name="Cle">Cle entrée par l'utilisateur</param>
  • ''' <remarks>Les cles sont calculés en fonction du parametre cle</remarks>
  • Public Sub New(ByVal Cle As String)
  • _UserKey = Cle
  • If Not (GenereCle(Cle)) Then
  • Throw New Exception("Erreur à la creation de la cle")
  • End If
  • End Sub
  • #End Region
  • End Class
Imports System.IO
Imports System.Text
Imports System.Security
Imports System.Security.Cryptography
Imports System.Runtime.Serialization.Formatters

' ------------------------------------------------------------------
'   Classe de cryptage et decryptage avec AES
'   Ecrit par LEVEUGLE Damien 
'   Elguevel software (c) 2008
'   http://elguevel.free.fr
' ------------------------------------------------------------------

Public Class ElgAESCrypt

#Region "Attributs"

    Private _UserKey As String      ' Cle entrée parl'utilisateur (en toute lettre)
    Private _SecretKey(15) As Byte  ' Cle secrete sur 128 bits generer par la fonction "GenereCle"
    Private _SecretIV(15) As Byte   ' Vecteur d'initialisation sur 128 bits generer par par la fonction "GenereCle"

#End Region

#Region "Proprietés"

    ''' <summary>
    ''' Cle secrete generée par la fonction <c>GenereCle</c>
    ''' </summary>    
    ''' <returns>Renvoi un tableau de Byte du vecteur</returns>
    ''' <remarks>Non utilisé ici, mais permet à l'utilisateur de pouvoir la récupérer si besoin</remarks>
    Public Property Key() As Byte()
        Get
            Return _SecretKey
        End Get
        Set(ByVal value As Byte())
            _SecretKey = value
        End Set
    End Property

    ''' <summary>
    '''  Vecteur d'initialisation generé par la fonction <c>GenereCle</c>
    ''' </summary>
    ''' <returns>Renvoi un tableau de Byte de la cle</returns>
    ''' <remarks>Non utilisé ici, mais permet à l'utilisateur de pouvoir la récupérer si besoin</remarks>
    Public Property IV() As Byte()
        Get
            Return _SecretIV
        End Get
        Set(ByVal value As Byte())
            _SecretIV = value
        End Set
    End Property

#End Region

#Region "Methodes"

    ''' <summary>        
    ''' La methode créée un hashage SHA de la cle entrée par l'utilisateur et recupère les 15 premier byte
    ''' et les entre ensuite comme cle (Key) et vecteur d'initialisation (IV), ce qui augmente encore la 
    ''' sécurité du cryptage d'un cran, et facilite l'uilisation de la classe de cryptage (1 seule cle).
    ''' </summary>
    ''' <param name="strKey">Cle entrée par l'utilisateur</param>
    ''' <returns>Information permettant de savoir si la procedure a fonctionné</returns>
    ''' <remarks></remarks>
    Private Function GenereCle(ByVal strKey As String) As Boolean

        Dim Resultat As Boolean = False

        Try

            ' Conversion de la clé utilisateur en tableau de byte
            Dim ByteKey(strKey.Length - 1) As Byte
            Dim aEnc As New UTF8Encoding
            aEnc.GetBytes(strKey, 0, strKey.Length, ByteKey, 0)

            'Hashage de la clé en utilisant SHA1
            Dim ServiceSHA As New SHA1CryptoServiceProvider
            Dim Hashage() As Byte = ServiceSHA.ComputeHash(ByteKey)

            ' Creation de la clé pour la valeur "Key" en prenant les 16 premier 
            ' caractere du hashage
            For I As Integer = 0 To 15
                _SecretKey(I) = Hashage(I)
            Next I

            ' Creation de la clé pour la valeur "IV" en prenant les 16 premier 
            ' caractere du hashage, mais en les plaçant dans le sens inverse
            For j As Integer = 15 To 0 Step -1
                _SecretIV(15 - j) = Hashage(j)
            Next

            Resultat = True

        Catch e As Exception
            Resultat = False

        End Try

        Return Resultat

    End Function


    ''' <summary>
    ''' Encrypte un fichier dans un autre
    ''' </summary>
    ''' <param name="sInputFilename">Fichier non crypter</param>
    ''' <param name="sOutputFilename">Fichier crypter</param>    
    ''' <remarks></remarks>
    Public Sub EncrypterFichier(ByVal sInputFilename As String, ByVal sOutputFilename As String)

        If Not (File.Exists(sInputFilename)) Then
            Throw New Exception("Vous devez specifier un fichier d'entrée existant !")
        End If

        Dim AES As New AesCryptoServiceProvider()
        Dim AesDecrypt As ICryptoTransform = AES.CreateEncryptor(_SecretKey, _SecretIV)

        Using fsInput As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read, FileShare.Read)

            ' Flux d'entree
            Using fsOutput As New FileStream(sOutputFilename, FileMode.Create, FileAccess.Write, FileShare.None)

                ' Flux de transformation qu'on rattache au flux de sortie
                Using cryptostream As New CryptoStream(fsOutput, AesDecrypt, CryptoStreamMode.Write)

                    ' Ecrit flux d'entre dans un tableau d'octet
                    Dim bytearrayinput(fsInput.Length - 1) As Byte
                    Dim bytesRead As Long = 0

                    bytesRead = fsInput.Read(bytearrayinput, 0, fsInput.Length)

                    If Not (bytesRead = 0) Then
                        ' Crypte tableau d'octet en ecrivant sur le flux de transformation (sortie)
                        cryptostream.Write(bytearrayinput, 0, bytesRead)
                        cryptostream.Flush()
                    End If

                End Using

            End Using

        End Using

    End Sub


    ''' <summary>
    ''' Decrypte un fichier crypté dans un autre
    ''' </summary>
    ''' <param name="sInputFilename">Fichier crypté</param>
    ''' <param name="sOutputFilename">Fichier non crypté</param>    
    ''' <remarks></remarks>
    Public Sub DecrypterFichier(ByVal sInputFilename As String, ByVal sOutputFilename As String)

        If Not (File.Exists(sInputFilename)) Then
            Throw New Exception("Vous devez specifier un fichier d'entrée existant !")
        End If

        Dim AES As New AesCryptoServiceProvider()
        Dim AesDecrypt As ICryptoTransform = AES.CreateDecryptor(_SecretKey, _SecretIV)

        Using fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read, FileShare.Read)

            Using cryptostreamDecr As New CryptoStream(fsread, AesDecrypt, CryptoStreamMode.Read)

                Using fsDecrypted As New FileStream(sOutputFilename, FileMode.Create, FileAccess.Write, FileShare.None)

                    Dim bytearrayinput(fsread.Length) As Byte
                    Dim bytesRead As Long = 0

                    bytesRead = cryptostreamDecr.Read(bytearrayinput, 0, fsread.Length)

                    If (bytesRead > 0) Then
                        fsDecrypted.Write(bytearrayinput, 0, bytesRead)
                        fsDecrypted.Flush()
                    End If

                End Using

            End Using

        End Using

    End Sub


    ''' <summary>
    ''' Encrypte une chaine de texte
    ''' </summary>
    ''' <param name="Chaine">Chaine en clair</param>
    ''' <returns>Chaine cryptée</returns>
    ''' <remarks></remarks>
    Public Function EncrypterChaine(ByVal Chaine As String) As String

        ' Objets AES
        Dim AES As New AesCryptoServiceProvider()
        Dim AesDecrypt As ICryptoTransform = AES.CreateEncryptor(_SecretKey, _SecretIV)

        ' Buffer de stockages
        Dim BufferEntree() As Byte

        ' Chaine tampon pour stocker resultat final
        Dim ChaineSortie As String = String.Empty

        ' On place la chaine en claire dans le buffer d'entrée
        BufferEntree = Encoding.ASCII.GetBytes(Chaine.ToCharArray)

        ' Flux de travail 
        Dim msSortie As New MemoryStream()

        ' Flux de transformation (lié au flux msInput)
        Dim cryptostream As New CryptoStream(msSortie, AesDecrypt, CryptoStreamMode.Write)

        ' On ecrit la chaine (en claire) du buffer d'entrée dans le flux de sortie (qui sera transformé au passage)
        cryptostream.Write(BufferEntree, 0, BufferEntree.Length)
        cryptostream.FlushFinalBlock()

        ' On stocke resultat avant de fermer les flux
        ChaineSortie = Convert.ToBase64String(msSortie.ToArray)

        ' On ferme les flux
        msSortie.Close()
        cryptostream.Close()

        Return ChaineSortie

    End Function


    ''' <summary>
    ''' Decrypte une chaine de texte
    ''' </summary>
    ''' <param name="ChaineCrypte">Chaine cryptée</param>
    ''' <returns>Chaine décryptée</returns>
    ''' <remarks></remarks>
    Public Function DecrypterChaine(ByVal ChaineCrypte As String) As String

        ' Objets AES
        Dim AES As New AesCryptoServiceProvider()
        Dim AesDecrypt As ICryptoTransform = AES.CreateDecryptor(_SecretKey, _SecretIV)

        ' Buffers de stockage
        Dim BufferEntree() As Byte  ' Buffer contenant la chaine d'entrée
        Dim BufferSortie() As Byte  ' Buffer contenant la chaine de sortie

        ' On convertie la chaine crypter pour la placer dans le buffer
        BufferEntree = Convert.FromBase64String(ChaineCrypte)

        ' On dimenssione le buffer de sortie
        ReDim BufferSortie(BufferEntree.Length)

        ' Flux d'entree qu'on rattache au buffer d'entrée
        Dim msInput As New MemoryStream(BufferEntree)

        ' Flux de transformation qu'on rattache au flux d'entrée
        Dim cryptostream As New CryptoStream(msInput, AesDecrypt, CryptoStreamMode.Read)

        ' On ecrit le resultat decrypté dans le buffer de sortie
        cryptostream.Read(BufferSortie, 0, BufferSortie.Length)

        ' On ferme les flux
        msInput.Close()
        cryptostream.Close()

        ' Retourne la chaine resultante
        Return Encoding.ASCII.GetString(BufferSortie)

    End Function

#End Region

#Region "Constructeur"

    ''' <summary>
    ''' Constructeur par defaut
    ''' </summary>
    ''' <param name="Cle">Cle entrée par l'utilisateur</param>
    ''' <remarks>Les cles sont calculés en fonction du parametre cle</remarks>
    Public Sub New(ByVal Cle As String)

        _UserKey = Cle

        If Not (GenereCle(Cle)) Then
            Throw New Exception("Erreur à la creation de la cle")
        End If

    End Sub

#End Region

End Class

 Conclusion

Bon code ...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

18 décembre 2008 16:48:35 :
Creation des methodes pour crypter/decrypter du texte à la volée (sans passer par des fichiers).

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) CLASSE POUR PILOTER EXCEL SIMPLEMENT
Source avec Zip Source avec une capture Source .NET (Dotnet) REMOTE KEYLOGGER
Source avec Zip Source avec une capture Source .NET (Dotnet) JEU DU MORPION .NET
Source avec Zip Source avec une capture Source .NET (Dotnet) CALCULATEUR DE RESISTANCE .NET
Source avec Zip Source avec une capture Source .NET (Dotnet) AFFICHEUR 7 SEGMENTS

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) CHIFFREMENT XOR PLUS ROBUSTE par dheroux
Source avec Zip CRYPTAGE MARANT par alpha5
Source avec Zip ACCÈS PAR MOT DE PASSE À FEUILLE EXCEL par mimiZanzan
Source avec Zip CRYPTER-DÉCRYPTER UN TEXTE - TEXTE CRYPTÉ UNIQUEMENT EN MAJ... par Saintache
Source avec Zip Source avec une capture FOLDER PROTECTION par hackoo

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) CRYPTAGE ET DECRYPTAGE par jerichez
Source avec Zip ACCÈS PAR MOT DE PASSE À FEUILLE EXCEL par mimiZanzan
Source avec Zip Source avec une capture Source .NET (Dotnet) CRYPTÉ/DÉCRYPTER UN TEXTE SELON UN CLÉ par Jeromedu79
Source avec Zip Source avec une capture FOLDER PROTECTION par hackoo
Source avec Zip CRYPTER AVEC AES 256 BITS ( ADVANCED ENCRYPTION STANDARD ) par Philippe734

Commentaires et avis

Commentaire de Redman31100 le 10/11/2008 09:03:16

J'ai modifié avec IO.MemoryStream mais j'arrive pas à récupérer le contenu crypté

Commentaire de elguevel le 17/11/2008 22:02:29

Désolé pour le temps de réponse, je n'avais pas vu qu'on m'avait ecrit ...

Pour le MemoryStream voici une méthode, à ajouter dans le module "ElgCrypt" :

---

    ''' <summary>
    ''' Encrypte une chaine de texte
    ''' </summary>
    ''' <param name="Chaine">Chaine en claire</param>
    ''' <returns>Chaine cryptée</returns>
    ''' <author>Elguevel</author>
    Public Function EncrypterChaine(ByVal Chaine As String) As String

        Dim AES As New AesCryptoServiceProvider()
        Dim AesCrypt As ICryptoTransform = AES.CreateEncryptor(_SecretKey, _SecretIV)

        Dim bufferEntree() As Byte
        Dim Resultat As String = ""

        ' Convertie la chaine et la place dans le buffer d'entree
        Dim ConvertArray As New System.Text.ASCIIEncoding()
        bufferEntree = ConvertArray.GetBytes(Chaine)

        ' Crée flux pour la sortie
        Using msOutput As New MemoryStream()

            Using cryptostream As New CryptoStream(msOutput, AesCrypt, CryptoStreamMode.Write)

                cryptostream.Write(bufferEntree, 0, bufferEntree.Length)
                cryptostream.FlushFinalBlock()

                Dim bufferSortie(msOutput.Length) As Byte

                msOutput.Position = 0
                msOutput.Read(bufferSortie, 0, msOutput.Length)

                Resultat = Convert.ToBase64String(bufferSortie)

            End Using

        End Using

        Return Resultat

    End Function

----

Bon code ...

Commentaire de Redman31100 le 18/11/2008 10:55:10

J'ai un souci avec ton code, je l'ai modifié :

    Public Function EncrypterChaine(ByVal Chaine As String) As String

        Dim AES As New Security.Cryptography.AesCryptoServiceProvider()
        AES.GenerateIV()
        If AES.ValidKeySize(FormatKey("Redman", AES.KeySize).Length) Then
            AES.Key = System.Text.Encoding.UTF8.GetBytes(FormatKey("Redman", AES.KeySize))
        Else
            MsgBox("Taille de Clé invalide !", MsgBoxStyle.Exclamation)
        End If

        Dim AesCrypt As Security.Cryptography.ICryptoTransform = AES.CreateEncryptor()

        Dim bufferEntree() As Byte
        Dim Resultat As String = ""

        ' Convertie la chaine et la place dans le buffer d'entree
        Dim ConvertArray As New System.Text.ASCIIEncoding()
        bufferEntree = ConvertArray.GetBytes(Chaine)

        ' Crée flux pour la sortie
        Using msOutput As New IO.MemoryStream()

            Using cryptostream As New Security.Cryptography.CryptoStream(msOutput, AesCrypt, Security.Cryptography.CryptoStreamMode.Write)

                cryptostream.Write(bufferEntree, 0, bufferEntree.Length)
                cryptostream.FlushFinalBlock()

                Dim bufferSortie(msOutput.Length) As Byte

                msOutput.Position = 0
                msOutput.Read(bufferSortie, 0, msOutput.Length)

                Resultat = Convert.ToBase64String(bufferSortie)

            End Using

        End Using

        Return Resultat

    End Function

Public Function FormatKey(ByVal Key As String, ByVal KeySize As Integer) As String
        If Key.Length < KeySize Then
            Key = Key.PadRight(KeySize)
        End If

        If Key.Length > KeySize Then
            Key = Key.Substring(0, KeySize)
        End If

        Return Key
    End Function

Lorsque je met une longueur de clé valide donc 256 caractères que j'ai même vérifier la longueur en débugguant. Ca me lève une System.Security.Cryptography.CryptographicException "La clé spécifiée n'est pas d'une taille valide pour cet algorithme." quand au VI je fais

Commentaire de foobar470 le 17/01/2009 22:35:35 9/10

Bon code, commenté et qui fonctionne.
Bravo.

Commentaire de kimooch le 17/05/2010 16:37:27

SALUT
si jveut introduire la clé ,que doit je faire puisque je génére les clé a partir d'une courbe élliptique

Commentaire de GrandByblos le 18/11/2010 10:27:35 9/10

Bonjour.

Votre code est ma foi très bon, et bien commenté qui plus est, ça fait plaisir.

Ceci étant dit, je me trouve face à un problème que j'ai du mal à résoudre : en voulant décrypter (fonction DecrypterChaine) une chaîne cryptée (of course) je me heurte à une exception lors de

cryptostream.Read(BufferSortie, 0, BufferSortie.Length)

L'exception levée est :

"Le remplissage n'est pas valide et ne peut pas être supprimé"

J'ai beau chercher, je ne trouve pas ce qui peut gérer ça !

Auriez-vous une idée ?

Commentaire de Sly83 le 17/12/2010 09:30:28

Bonjour,
il me semble que le problème provient du fait que la clé utilisée pour le décryptage ne soit pas la même qui a servi au cryptage du fichier.

Commentaire de lilj le 10/02/2011 09:25:01

Code très utile merci, cependant, j'ai un petit soucis. Voilà, ce que je fais :
Dim crypt As New ElgAESCrypt("Clé")
dim machaine as string
machaine = crypt.EncrypterChaine("machaine1")

jusque là pas de soucis. mais le décryptage :

dim machainedecrypt as string = crypt.DécrypterChaine(machaine)
msgbox(machainedecrypt & "je teste") =>> Affiche "machaine1" (il est où le "je teste" ???)
ou encore
dim mavar as string
mavar = "Mon truc " & machainedecrypt  & "; cool" =>> Affiche "Mon truc machaine1         ; cool"

Pourquoi il y a un si grand espace alors que normalement :
dim unechaine as string = "test"
mavar = "Mon truc " & unechaine  & "; cool" =>> Affiche "Mon truc test; cool"

j'espère avoir était clair..
Comment résoudre cela ? car une chose est sûr après des tests que cela vient du fait :
dim machainedecrypt as string = crypt.DécrypterChaine(machaine)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Cryptage AES avec VB 2005 Express? [ par Doud38 ] Bonjour à tous,J'aimerai crypter et décrypter (cryptage AES) des chaines de caractères sous VB 2005 Express. Est-ce possible?Est-ce quelqu'un peut m'a Proogrammation du protocole de cryptage [ par majdimab ] Salut,   Je suis un étudiant de l'ENIM "Ecole Nationale d'Ingénieur de Monastir" (TUNISIE).Mon projet de fin d'étude est intitulé "implentation de pro cryptage décryptage d'un mot de passe [ par faucheuse ] Bonjour tout le monde,Je me suis mis recemment aux macros sur excel, je connais donc quelques bases et me fournit en code sur internet(bien sur je ne cryptage et utilisation [ par majdimab ] Salut, je suis débutant en vb.net, j'ai réalisé un programme qui crypte le message avec le protocole d'EL GAMEL(sur les courbes elliptique).je voudrai Cryptage 128, 256 ????? [ par hippo92210b ] Bonjours, Il u a quelque jour, je me suis intéresser de prés au cryptage et j'ai donc pris une source de cryptage RC4et je voudrai que le texte soi c communication cryptage protocol et autres [ par codewarx ] Bonjour a tous je recherche des informations pour confectionner un multi scanner utilisant tous mes moyens de comunications en meme temps et qui poura Problème Cryptage Vigénère [ par Redman31100 ] Bonjour à tous !J'ai commencé à faire seulement le code de cryptage Vigénère.Voici le code : Public Shared Function Cryptage(ByVal TextClair As String cryptage [ par achills ] svp j'ai une autre question: je crypte mes données (text1.text) puis je les enregistre dans un fichier text et je les charge au démarrage du forum,le cryptage application (vb6 utilisant liste et fichier texte [ par bayrem2 ] salut,je suis debutant en informatique , je une application vb que je la termine, je suis demandé de la crypte , mais je sais pas que çc veut dire cry cryptage [ par Kynouu ] Bonjour, désolé mais je ne suis pas un doué de l'informatique et j'aurais voulu savoir quel est ce cryptage : 7CDACE27C070-45D55--4079-45A0B43DFE1 et


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,196 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales