Translate

Donnerstag, 30. April 2015

Visual Basic .net Strings mit AES verschlüsseln

Option Strict On

Imports System.Security.Cryptography

Public Class cCrypt

#Region "Zustandsvariablen"
    Private EncryptedString_ As String
    Private DecryptedString_ As String
#End Region

    Public Sub New()

    End Sub

#Region "Methoden"
    ' Verschlüsseln
    Public Sub Encrypt(ByVal AESKeySize As Int32, _
      ByVal DecryptedString As String, _
      ByVal Password As String)

        ' Der Salt-Wert ist eine zufällig gewählte Zeichenfolge,
        ' wenn man so will ein zweites Passwort.
        ' Nur wer den Salt-Wert und das Passwort kennt,
        ' kann entschlüsseln.
        ' Durch Verwendung eines Salt-Wertes ist es deutlich
        ' schwerer das Passwort zu knacken.
        ' Wird das Passwort selber zur Erstellung des Salt-Wertes
        ' verwendet, muss dieses mindestens 8 Zeichen haben.
        Dim Salt() As Byte
        Salt = System.Text.Encoding.UTF8.GetBytes( _
          "12345")

        ' Mit Hilfe des Passwortes und des Salt wird ein Key (Hash-Wert)
        ' generiert, der später zur Initialisierung des
        ' AES-Algorithmus verwendt wird.
        Dim GenerierterKey As New Rfc2898DeriveBytes(Password, Salt)

        ' Instanzierung des AES-Algorithmus-Objekts mit 256-bit
        ' oder 256-bit Schlüssel und 256-bit Block-Size
        Dim AES As New AesManaged
        AES.KeySize = AESKeySize ' möglich sind 128 oder 256 bit
        AES.BlockSize = 128

        ' Algorithmus initialisieren:
        AES.Key = GenerierterKey.GetBytes(AES.KeySize \ 8)
        AES.IV = GenerierterKey.GetBytes(AES.BlockSize \ 8)

        ' Memory-Stream und Crypto-Stream erzeugen -> CreateEncryptor()
        Dim ms As New IO.MemoryStream
        Dim cs As New CryptoStream(ms, AES.CreateEncryptor(), _
          CryptoStreamMode.Write)

        ' Daten verschlüsseln:
        Dim Data() As Byte
        Data = System.Text.Encoding.UTF8.GetBytes(DecryptedString)
        cs.Write(Data, 0, Data.Length)
        cs.FlushFinalBlock()
        cs.Close()

        ' Verschlüsselte Daten als String ausgeben:
        EncryptedString_ = Convert.ToBase64String(ms.ToArray)
        ms.Close()

        AES.Clear()

    End Sub

    ' Entschlüsseln
    Public Sub Decrypt(ByVal AESKeySize As Int32, _
      ByVal EncryptedString As String, _
      ByVal Password As String)

        ' Der Salt-Wert und das Passwort müssen mit dem übereinstimmen,
        ' das bei der Verschlüsselung verwendet wurde:
        Dim Salt() As Byte
        Salt = System.Text.Encoding.UTF8.GetBytes( _
          "12345")

        Dim GenerierterKey As New Rfc2898DeriveBytes(Password, Salt)

        ' Instanzierung des AES-Algorithmus-Objekts:
        Dim AES As New AesManaged
        ' Ein mit 256 bit verschlüsselter String kann
        ' auch nur mit 256 bit entschlüsselt werden!
        AES.KeySize = AESKeySize ' möglich sind 128 oder 256 bit
        AES.BlockSize = 128

        ' Algorithmus initialisieren:
        AES.Key = GenerierterKey.GetBytes(AES.KeySize \ 8)
        AES.IV = GenerierterKey.GetBytes(AES.BlockSize \ 8)

        ' Memory-Stream und Crypto-Stream erzeugen -> CreateDecryptor()
        Dim ms As New IO.MemoryStream
        Dim cs As New CryptoStream(ms, AES.CreateDecryptor(), _
          CryptoStreamMode.Write)

        Try ' Daten entschlüsseln:
            Dim Data() As Byte
            Data = Convert.FromBase64String(EncryptedString)
            cs.Write(Data, 0, Data.Length)
            cs.FlushFinalBlock()
            cs.Close()

            ' Die entschlüsselten Daten als String ausgeben:
            DecryptedString_ = System.Text.Encoding.UTF8.GetString(ms.ToArray)
            ms.Close()

            AES.Clear()
        Catch ex As Exception
            DecryptedString_ = "Ungültiges Passwort!"
        End Try

    End Sub
#End Region

#Region "Eigenschaften"
    ReadOnly Property EncryptedString() As String
        Get
            Return EncryptedString_
        End Get
    End Property


    ReadOnly Property DecryptedString() As String
        Get
            Return DecryptedString_
        End Get
    End Property
#End Region

End Class
 

Visual Basic .net-Datagridview Spalten auf Datum/ Währung formatieren

Me.dataGridView1.Columns("UnitPrice").DefaultCellStyle.Format = "c"
Me.dataGridView1.Columns("ShipDate").DefaultCellStyle.Format = "d"

Visual Basic .net-Datagridview sortieren

DataGridView.Sort(DataGridView.Columns(1), System.ComponentModel.ListSortDirection.Ascending)

DataGridView.Sort(DataGridView.Columns(1), System.ComponentModel.ListSortDirection.Descending)