Criptare/Decriptare una stringa con l'algoritmo 3DES in VB.NET

Spesso occorre criptare dei dati sensibili in modo da proteggerli da occhi indiscreti. In questo esempio vi mostrerò come criptare una stringa con l'algoritmo 3DES.

Il seguente file contiene un progetto VB.NET di esempio:

3DES in VB.NET  Scaricato 715 volte

La classe Simple3Des è la seguente:

 
Imports System.Security.Cryptography
Public Class Simple3Des
    Public NotInheritable Class Simple3Des
    End Class
    Private TripleDes As New TripleDESCryptoServiceProvider
 
    Private Function TruncateHash(ByVal key As String, ByVal length As Integer) As Byte()
 
        Dim sha1 As New SHA1CryptoServiceProvider
 
        ' Hash the key.
        Dim keyBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(key)
        Dim hash() As Byte = sha1.ComputeHash(keyBytes)
 
        ' Truncate or pad the hash.
        ReDim Preserve hash(length - 1)
        Return hash
    End Function
 
    Sub New(ByVal key As String)
        ' Initialize the crypto provider.
        TripleDes.Key = TruncateHash(key, TripleDes.KeySize \ 8)
        TripleDes.IV = TruncateHash("", TripleDes.BlockSize \ 8)
    End Sub
 
    Public Function EncryptData(ByVal plaintext As String) As String
        ' Convert the plaintext string to a byte array.
        Dim plaintextBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(plaintext)
 
        ' Create the stream.
        Dim ms As New System.IO.MemoryStream
        ' Create the encoder to write to the stream.
        Dim encStream As New CryptoStream(ms, TripleDes.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
 
        ' Use the crypto stream to write the byte array to the stream.
        encStream.Write(plaintextBytes, 0, plaintextBytes.Length)
        encStream.FlushFinalBlock()
 
        ' Convert the encrypted stream to a printable string.
        Return Convert.ToBase64String(ms.ToArray)
    End Function
 
    Public Function DecryptData(ByVal encryptedtext As String) As String
        Try
            ' Convert the encrypted text string to a byte array.
            Dim encryptedBytes() As Byte = Convert.FromBase64String(encryptedtext)
 
            ' Create the stream.
            Dim ms As New System.IO.MemoryStream
            ' Create the decoder to write to the stream.
            Dim decStream As New CryptoStream(ms, TripleDes.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
 
            ' Use the crypto stream to write the byte array to the stream.
            decStream.Write(encryptedBytes, 0, encryptedBytes.Length)
            decStream.FlushFinalBlock()
 
            ' Convert the plaintext stream to a string.
            Return System.Text.Encoding.Unicode.GetString(ms.ToArray)
        Catch ex As Exception
            Return ""
        End Try
    End Function
End Class

Come utilizzarla?

 
Dim _Crypto As New Simple3Des(chiave)
StringaCriptata = _Crypto.DecryptData(StringaDecriptata)
StringaDecriptata = _Crypto.EncryptData(StringaCriptata)