CRYPTAGE/DECRYPTAGE DE FICHIER AVEC AES

Redman31100 Messages postés 167 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 11 février 2009 - 10 nov. 2008 à 09:03
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 - 12 sept. 2012 à 19:19
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48385-cryptage-decryptage-de-fichier-avec-aes

Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
12 sept. 2012 à 19:19
Merci pour le partage, je l’utilise en ce moment même, mais comme je souhaite crypter tout une classe sérialisé, je suis obligé de créer le fichier de base, le crypter puis de supprimer l'ancien ficher de base (idem à la lecture) Vois tu mieux à faire ? cdlt et encore merci, simple et efficace.
blq Messages postés 97 Date d'inscription vendredi 22 octobre 1999 Statut Membre Dernière intervention 13 juin 2016 1
10 juin 2012 à 19:34
Excellent code. Fonctionne très bien avec VB 2010 Express. Merci pour cette contribution.
nanar314 Messages postés 2 Date d'inscription mardi 28 janvier 2003 Statut Membre Dernière intervention 5 mai 2012 1
5 mai 2012 à 23:59
Code fonctionnel, bien commenté, facilement intégrable à un projet.

Merci. Dès que mon petit Freeware, intégrant la class ElgAESCrypt, sera terminé, je l'enverrai à l'auteur

NB : Cette Class n'est compatible que pour FrameWorks 3.5 ou +
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
10 févr. 2011 à 09:25
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 stringmavar "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)
cs_Sly83 Messages postés 1 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 17 décembre 2010
17 déc. 2010 à 09:30
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.
GrandByblos Messages postés 2 Date d'inscription mercredi 27 décembre 2000 Statut Membre Dernière intervention 18 novembre 2010
18 nov. 2010 à 10:27
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 ?
kimooch Messages postés 1 Date d'inscription lundi 4 mai 2009 Statut Membre Dernière intervention 17 mai 2010
17 mai 2010 à 16:37
SALUT
si jveut introduire la clé ,que doit je faire puisque je génére les clé a partir d'une courbe élliptique
foobar470 Messages postés 7 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 17 janvier 2009
17 janv. 2009 à 22:35
Bon code, commenté et qui fonctionne.
Bravo.
Redman31100 Messages postés 167 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 11 février 2009
18 nov. 2008 à 10:55
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
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
17 nov. 2008 à 22:02
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>
''' Chaine en claire


''' <returns>Chaine cryptée</returns>
''' Elguevel
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 ...
Redman31100 Messages postés 167 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 11 février 2009
10 nov. 2008 à 09:03
J'ai modifié avec IO.MemoryStream mais j'arrive pas à récupérer le contenu crypté
Rejoignez-nous