VB.NET-Tipp 0099: RSA-Signatur mit dem RSACryptoServiceProvider erzeugen und prüfen
von Danielo
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: | 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: |
' 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.