DSACryptoServiceProvider Class
Defines a wrapper object to access the cryptographic service provider (CSP) implementation of the DSA algorithm. This class cannot be inherited.
System.Security.Cryptography::AsymmetricAlgorithm
System.Security.Cryptography::DSA
System.Security.Cryptography::DSACryptoServiceProvider
Assembly: mscorlib (in mscorlib.dll)
The DSACryptoServiceProvider type exposes the following members.
| Name | Description | |
|---|---|---|
![]() | DSACryptoServiceProvider() | Initializes a new instance of the DSACryptoServiceProvider class. |
![]() | DSACryptoServiceProvider(CspParameters) | Initializes a new instance of the DSACryptoServiceProvider class with the specified parameters for the cryptographic service provider (CSP). |
![]() | DSACryptoServiceProvider(Int32) | Initializes a new instance of the DSACryptoServiceProvider class with the specified key size. |
![]() | DSACryptoServiceProvider(Int32, CspParameters) | Initializes a new instance of the DSACryptoServiceProvider class with the specified key size and parameters for the cryptographic service provider (CSP). |
| Name | Description | |
|---|---|---|
![]() | CspKeyContainerInfo | Gets a CspKeyContainerInfo object that describes additional information about a cryptographic key pair. |
![]() | KeyExchangeAlgorithm | Gets the name of the key exchange algorithm. (Overrides AsymmetricAlgorithm::KeyExchangeAlgorithm.) |
![]() | KeySize | Gets the size of the key used by the asymmetric algorithm in bits. (Overrides AsymmetricAlgorithm::KeySize.) |
![]() | LegalKeySizes | Gets the key sizes that are supported by the asymmetric algorithm. (Inherited from AsymmetricAlgorithm.) |
![]() | PersistKeyInCsp | Gets or sets a value indicating whether the key should be persisted in the cryptographic service provider (CSP). |
![]() | PublicOnly | Gets a value that indicates whether the DSACryptoServiceProvider object contains only a public key. |
![]() | SignatureAlgorithm | Gets the name of the signature algorithm. (Overrides AsymmetricAlgorithm::SignatureAlgorithm.) |
![]() ![]() | UseMachineKeyStore | Gets or sets a value indicating whether the key should be persisted in the computer's key store instead of the user profile store. |
| Name | Description | |
|---|---|---|
![]() | Clear | Releases all resources used by the AsymmetricAlgorithm class. (Inherited from AsymmetricAlgorithm.) |
![]() | CreateSignature | Creates the DSA signature for the specified data. (Overrides DSA::CreateSignature(array<Byte>).) |
![]() | Dispose() | Releases all resources used by the current instance of the AsymmetricAlgorithm class. (Inherited from AsymmetricAlgorithm.) |
![]() | Dispose(Boolean) | Releases the unmanaged resources used by the AsymmetricAlgorithm class and optionally releases the managed resources. (Inherited from AsymmetricAlgorithm.) |
![]() | Equals(Object) | Determines whether the specified Object is equal to the current Object. (Inherited from Object.) |
![]() | ExportCspBlob | Exports a blob containing the key information associated with a DSACryptoServiceProvider object. |
![]() | ExportParameters | Exports the DSAParameters. (Overrides DSA::ExportParameters(Boolean).) |
![]() | Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) |
![]() | FromXmlString | Reconstructs a DSA object from an XML string. (Inherited from DSA.) |
![]() | GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) |
![]() | GetType | Gets the Type of the current instance. (Inherited from Object.) |
![]() | ImportCspBlob | Imports a blob that represents DSA key information. |
![]() | ImportParameters | Imports the specified DSAParameters. (Overrides DSA::ImportParameters(DSAParameters).) |
![]() | MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
![]() | SignData(array<Byte>) | Computes the hash value of the specified byte array and signs the resulting hash value. |
![]() | SignData(Stream) | Computes the hash value of the specified input stream and signs the resulting hash value. |
![]() | SignData(array<Byte>, Int32, Int32) | Signs a byte array from the specified start point to the specified end point. |
![]() | SignHash | Computes the signature for the specified hash value by encrypting it with the private key. |
![]() | ToString | Returns a string that represents the current object. (Inherited from Object.) |
![]() | ToXmlString | Creates and returns an XML string representation of the current DSA object. (Inherited from DSA.) |
![]() | VerifyData | Verifies the specified signature data by comparing it to the signature computed for the specified data. |
![]() | VerifyHash | Verifies the specified signature data by comparing it to the signature computed for the specified hash value. |
![]() | VerifySignature | Verifies the DSA signature for the specified data. (Overrides DSA::VerifySignature(array<Byte>, array<Byte>).) |
| Name | Description | |
|---|---|---|
![]() | KeySizeValue | Represents the size, in bits, of the key modulus used by the asymmetric algorithm. (Inherited from AsymmetricAlgorithm.) |
![]() | LegalKeySizesValue | Specifies the key sizes that are supported by the asymmetric algorithm. (Inherited from AsymmetricAlgorithm.) |
You can use the DSACryptoServiceProvider class to create digital signatures and protect the integrity of your data.
To use a public-key system to digitally sign a message, the sender first applies a hash function to the message to create a message digest. The sender then encrypts the message digest with the sender's private key to create the sender's personal signature. Upon receiving the message and signature, the receiver decrypts the signature using the sender's public key to recover the message digest and hashes the message using the same hash algorithm that the sender used. If the message digest that the receiver computes exactly matches the message digest received from the sender, the receiver can be sure that the message was not altered while in transit. Note that a signature can be verified by anyone, because the sender's public key is common knowledge.
This algorithm supports key lengths from 512 bits to 1024 bits in increments of 64 bits.
The following code example creates a digital signature of a hash value using the DSACryptoServiceProvider class and then verifies the signature.
using namespace System; using namespace System::Security::Cryptography; public ref class DSACSPSample { public: static void Main() { try { DSAParameters privateKeyInfo; DSAParameters publicKeyInfo; // Create a new instance of DSACryptoServiceProvider to generate // a new key pair. DSACryptoServiceProvider^ DSA = gcnew DSACryptoServiceProvider(); privateKeyInfo = DSA->ExportParameters(true); publicKeyInfo = DSA->ExportParameters(false); delete DSA; // The hash value to sign. array<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. array<Byte>^ SignedHashValue = DSASignHash(HashValue, privateKeyInfo, "SHA1"); // Verify the hash and display the results. bool verified = DSAVerifyHash(HashValue, SignedHashValue, publicKeyInfo, "SHA1"); if (verified) { Console::WriteLine("The hash value was verified."); } else { Console::WriteLine("The hash value was not verified."); } } catch (ArgumentNullException^ e) { Console::WriteLine(e->Message); } } static array<Byte>^ DSASignHash(array<Byte>^ HashToSign, DSAParameters DSAKeyInfo, String^ HashAlg) { array<Byte>^ sig = nullptr; try { // Create a new instance of DSACryptoServiceProvider. DSACryptoServiceProvider^ DSA = gcnew DSACryptoServiceProvider(); // Import the key information. DSA->ImportParameters(DSAKeyInfo); // Create an DSASignatureFormatter object and pass it the // DSACryptoServiceProvider to transfer the private key. DSASignatureFormatter^ DSAFormatter = gcnew DSASignatureFormatter(DSA); // Set the hash algorithm to the passed value. DSAFormatter->SetHashAlgorithm(HashAlg); // Create a signature for HashValue and return it. sig = DSAFormatter->CreateSignature(HashToSign); delete DSA; } catch (CryptographicException^ e) { Console::WriteLine(e->Message); } return sig; } static bool DSAVerifyHash(array<Byte>^ HashValue, array<Byte>^ SignedHashValue, DSAParameters DSAKeyInfo, String^ HashAlg) { bool verified = false; try { // Create a new instance of DSACryptoServiceProvider. DSACryptoServiceProvider^ DSA = gcnew DSACryptoServiceProvider(); //Import the key information. DSA->ImportParameters(DSAKeyInfo); // Create an DSASignatureDeformatter object and pass it the // DSACryptoServiceProvider to transfer the private key. DSASignatureDeformatter^ DSADeformatter = gcnew DSASignatureDeformatter(DSA); // Set the hash algorithm to the passed value. DSADeformatter->SetHashAlgorithm(HashAlg); // Verify signature and return the result. verified = DSADeformatter->VerifySignature(HashValue, SignedHashValue); delete DSA; } catch (CryptographicException^ e) { Console::WriteLine(e->Message); } return verified; } }; int main() { DSACSPSample::Main(); }
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
