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
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.