copyright 1999 - 2014 by heinz prelle - hannover  - lenbachstraße 42 - www.visual-basic5.de | impressum
'Beispiel: VB .Net - Text ver- und entschlüsseln - 5
'

Imports System.Security.Cryptography
Imports System.Text
Imports System.IO

Public Class Form1

    Public Class RandomSalt
        Public Shared Salt As Byte() = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
        Public Const RandomKeyBytes As Integer = 24
    End Class

    Public Class EncryptDecrypt

        Public Shared Function Encrypt(ByVal Source As String, ByVal Password As String) As String
            Dim Result As String = Nothing
            Try
                Dim cb As Byte()
                Using csp As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider()
                    Dim Encode As UnicodeEncoding = New UnicodeEncoding()
                    Dim Bytes As Byte() = Encode.GetBytes(Source)
                    Using ms As MemoryStream = New MemoryStream()
                        Dim rfc As New Rfc2898DeriveBytes(Password, RandomSalt.Salt)
                        cb = rfc.GetBytes(RandomSalt.RandomKeyBytes)
                        csp.Key = cb
                        csp.IV = rfc.GetBytes(RandomSalt.RandomKeyBytes / 3)
                        Using cs As CryptoStream = New CryptoStream(ms, csp.CreateEncryptor(), CryptoStreamMode.Write)
                            With cs
                                .Write(Bytes, 0, Bytes.Length())
                                .FlushFinalBlock()
                                Result = Convert.ToBase64String(ms.ToArray())
                            End With
                        End Using
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Error")
            End Try
            Return Result
        End Function

        Public Shared Function Decrypt(ByVal Source As String, ByVal Password As String) As String
            Dim Result As String = Nothing
            Try
                Dim cb As Byte()
                Using csp As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider()
                    Dim Encode As UnicodeEncoding = New UnicodeEncoding()
                    Dim Bytes As Byte() = Convert.FromBase64String(Source)
                    Using ms As MemoryStream = New MemoryStream
                        Using CipherText As MemoryStream = New MemoryStream(Bytes)
                            Dim rfc As New Rfc2898DeriveBytes(Password, RandomSalt.Salt)
                            cb = rfc.GetBytes(RandomSalt.RandomKeyBytes)
                            csp.Key = cb
                            csp.IV = rfc.GetBytes(RandomSalt.RandomKeyBytes / 3)
                            Using cs As CryptoStream = New CryptoStream(CipherText, csp.CreateDecryptor(), CryptoStreamMode.Read)
                                Using sw As StreamWriter = New StreamWriter(ms)
                                    Using sr As StreamReader = New StreamReader(cs)
                                        With sw
                                            .Write(sr.ReadToEnd)
                                            .Flush()
                                        End With
                                        Result = Encode.GetString(ms.ToArray())
                                    End Using
                                End Using
                            End Using
                        End Using
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Error")
            End Try
            Return Result
        End Function

    End Class

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With Me
            .Text = "Ver- und Entschluesseln"
            .CenterToScreen()
            .Label1.Text = "Quelle:" : .Label2.Text = "Verschluesselt:" : .Label3.Text = "Entschluesselt:"
            .Label4.Text = "Schluessel:"
            .TextBox4.Text = "aabbccdd"
            .Button3.Text = "Textdatei laden"
            With Me.TextBox1
                .Text = "Hello Welt " & "Dies ist ein Test" & _
                    System.Environment.NewLine & "einen Text zu ver- oder zu entschluesseln."
                With Button1
                    .Text = "Verschluesseln"
                    With Button2
                        .Text = "Entschluesseln"
                    End With
                End With
            End With
        End With
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles Button1.Click
        If Me.TextBox4.Text = "" Then Return

        Dim Encrypted As String = EncryptDecrypt.Encrypt(Me.TextBox1.Text, Me.TextBox4.Text)
        Me.TextBox2.Text = Encrypted
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles Button2.Click
        If Me.TextBox4.Text = "" Then Return

        Dim Decrypted As String = EncryptDecrypt.Decrypt(Me.TextBox2.Text, Me.TextBox4.Text)
        Me.TextBox3.Text = Decrypted
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles Button3.Click
        For Each ctrl As Control In Me.Controls
            If TypeOf ctrl Is TextBox Then
                If ctrl.Name <> "TextBox4" Then
                    ctrl.Text = ""
                End If
            End If
        Next
        Using ofd As OpenFileDialog = New OpenFileDialog
            With ofd
                .Title = "Datei oeffnen..."
                .Filter = "Textdateien *.txt|*.txt"
                Dim Content As String = Nothing
                Try
                    If .ShowDialog = Windows.Forms.DialogResult.OK Then
                        Content = My.Computer.FileSystem.ReadAllText(.FileName)
                        If Not Content Is Nothing Then
                            Me.TextBox1.Text = Content
                        Else
                            'To do...
                        End If
                    Else
                        'To do...
                    End If
                Catch ex As Exception
                    MessageBox.Show(ex.Message(), "Error")
                End Try
            End With
        End Using
    End Sub

End Class
Sourcecode Visual Basic