Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0099: RSA-Signatur mit dem RSACryptoServiceProvider erzeugen und prüfen

 von 

Beschreibung

Eine elektronische Signatur verwendet ein asymmetrisches Verschlüsselungsverfahren (z.B. RSA) um die Authentizität von Daten zu bestimmen. Dabei wird zuerst ein Schlüsselpaar erstellt und der öffentliche Schlüsselteil weitergegeben. Der Besitzer des privaten Schlüsselteils kann daraufhin Daten signieren und die Daten mitsamt der dabei generierten Signatur weitergeben. Ein Empfänger kann mithilfe des öffentlichen Schlüssels daraufhin feststellen, ob die Daten verändert wurden, und ob die Signatur mit dem zum öffentlichen Schlüsselteil gehörenden privaten Teil erstellt wurde. Für RSA-Signaturen bietet .NET die RSACryptoServiceProvider-Klasse an. In diesem Beispiel wird gezeigt wie Daten signiert, der private und der öffentliche Schlüsselteil exportiert und eine Signatur überprüft wird.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Framework-Version(en):

.NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [11,27 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2008
' Option Strict:    Aus
' Option Explicit:  An
' Option Infer:     An
'
' Referenzen: 
'  - System
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'  - System.Core
'  - System.Xml.Linq
'
' Imports: 
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'  - System.Linq
'  - System.Xml.Linq
'

' ##############################################################################
' ################################# frmRSA.vb ##################################
' ##############################################################################
Imports System.Security.Cryptography

Public Class frmRSA
    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click

        ' Erstellt einen neuen zufälligen Schlüssel
        Dim oRsaProvider As New RSACryptoServiceProvider
        Dim btData() As Byte = System.Text.Encoding.UTF8.GetBytes(txtData.Text)

        Try
            If txtPrivateKey.Text = "" Then
                ' Generierten, zufälligen Schlüssel merken
                txtPrivateKey.Text = oRsaProvider.ToXmlString(True)
                txtPublicKey.Text = oRsaProvider.ToXmlString(False)
            Else
                ' Bereits generierten privaten Schlüssel importieren
                oRsaProvider.FromXmlString(txtPrivateKey.Text)
            End If

            Dim btSignature As Byte() = _
                oRsaProvider.SignData(btData, GetType(SHA1))

            txtSignature.Text = Convert.ToBase64String(btSignature)
            Catch
            ' Möglicherweise ist der private Schlüssel nicht valide?
            MessageBox.Show("Signatur konnte nicht erstellt werden!")
        End Try
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button2.Click

        Dim oRsaProvider As New RSACryptoServiceProvider
        Dim btData() As Byte = System.Text.Encoding.UTF8.GetBytes(txtData.Text)

        Try
            Dim btSignature() As Byte = _
                Convert.FromBase64String(txtSignature.Text)

            oRsaProvider.FromXmlString(txtPublicKey.Text)
            MessageBox.Show("Signatur gültig: " & _
                oRsaProvider.VerifyData(btData, GetType(SHA1), btSignature))
        Catch
            ' Möglicherweise ist der öffentliche Schlüssel nicht valide?
            MessageBox.Show("Signatur konnte nicht überprüft werden!")
        End Try
    End Sub
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.