Freigeben über


Erzeugen von Signaturen

Digitale Signaturen werden in der Regel auf Hashwerte angewendet, die eine größere Datenmenge darstellen. Im folgenden Beispiel wird eine digitale Signatur auf einen Hashwert angewendet. Zuerst wird eine neue Instanz der RSACryptoServiceProvider-Klasse erstellt, um ein öffentliches/privates Schlüsselpaar zu erzeugen. Anschließend wird die RSACryptoServiceProvider-Klasse an eine neue Instanz der RSAPKCS1SignatureFormatter-Klasse übergeben. Dadurch wird der private Schlüssel an den RSAPKCS1SignatureFormatter übertragen, der letztlich die digitale Signatur vornimmt. Ehe der Hashcode signiert werden kann, müssen Sie den zu verwendenden Hashalgorithmus angeben. In diesem Beispiel wird der SHA1-Algorithmus verwendet. Abschließend wird die RSAPKCS1SignatureFormatter.CreateSignature-Methode aufgerufen, um die Signatur vorzunehmen.

Imports System
Imports System.Security.Cryptography

Module Module1
    Sub Main()
        'The hash value to sign.
        Dim HashValue As Byte() = {59, 4, 248, 102, 77, 97, 142, 201, 210, 12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135}

        'The value to hold the signed value.
        Dim SignedHashValue() As Byte

        'Generate a public/private key pair.
        Dim RSA As New RSACryptoServiceProvider()

        'Create an RSAPKCS1SignatureFormatter object and pass it 
        'the RSACryptoServiceProvider to transfer the private key.
        Dim RSAFormatter As New RSAPKCS1SignatureFormatter(RSA)

        'Set the hash algorithm to SHA1.
        RSAFormatter.SetHashAlgorithm("SHA1")

        'Create a signature for HashValue and assign it to 
        'SignedHashValue.
        SignedHashValue = RSAFormatter.CreateSignature(HashValue)
    End Sub
End Module

using System;
using System.Security.Cryptography;
[C#]
class Class1
{
   static void Main()
   {
      //The hash value to sign.
      byte[] HashValue = {59,4,248,102,77,97,142,201,210,12,224,93,25,41,100,197,213,134,130,135};

      //The value to hold the signed value.
      byte[] SignedHashValue;

      //Generate a public/private key pair.
      RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

      //Create an RSAPKCS1SignatureFormatter object and pass it the 
      //RSACryptoServiceProvider to transfer the private key.
      RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);

      //Set the hash algorithm to SHA1.
      RSAFormatter.SetHashAlgorithm("SHA1");

      //Create a signature for HashValue and assign it to 
      //SignedHashValue.
      SignedHashValue = RSAFormatter.CreateSignature(HashValue);
   }
}

Signieren von XML-Dateien

.NET Framework stellt den System.Security.Cryptography.XML-Namespace bereit, der das Signieren von XML-Dateien ermöglicht. Das Signieren von XML-Dateien ist wichtig, wenn überprüft werden soll, ob eine XML-Datei von einer bestimmten Quelle stammt. Wenn Sie beispielsweise einen Aktienkursdienst beziehen, der XML verwendet, können Sie die Quelle der XML-Datei überprüfen, wenn diese signiert ist.

Die Klassen in diesem Namespace entsprechen der Empfehlung des World Wide Web Consortium unter "XML-Signature Syntax and Processing" (nur auf Englisch verfügbar), nachzulesen unter www.w3.org.

Siehe auch

Überprüfen von Signaturen | Kryptographische Signaturen | Kryptographische Aufgaben | Kryptographische Dienste