RSACryptoServiceProvider.SignData Method (Stream, Object)
Computes the hash value of the specified input stream using the specified hash algorithm, and signs the resulting hash value.
Namespace: System.Security.Cryptography
Assembly: mscorlib (in mscorlib.dll)
Parameters
- inputStream
- Type: System.IO.Stream
The input data for which to compute the hash.
- halg
- Type: System.Object
The hash algorithm to use to create the hash value.
| Exception | Condition |
|---|---|
| ArgumentNullException | The halg parameter is null. |
| ArgumentException | The halg parameter is not a valid type. |
The halg parameter can accept a String, a HashAlgorithm, or a Type.
The following code example signs and verifies data.
using System; using System.Security.Cryptography; using System.Text; using System.IO; class RSACSPSample { static void Main() { try { ASCIIEncoding ByteConverter = new ASCIIEncoding(); // Create some bytes to be signed. byte[] dataBytes = ByteConverter.GetBytes("Here is some data to sign!"); // Create a buffer for the memory stream. byte[] buffer = new byte[dataBytes.Length]; // Create a MemoryStream. MemoryStream mStream = new MemoryStream(buffer); // Write the bytes to the stream and flush it. mStream.Write(dataBytes, 0, dataBytes.Length); mStream.Flush(); // Create a new instance of the RSACryptoServiceProvider class // and automatically create a new key-pair. RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(); // Export the key information to an RSAParameters object. // You must pass true to export the private key for signing. // However, you do not need to export the private key // for verification. RSAParameters Key = RSAalg.ExportParameters(true); // Hash and sign the data. byte[] signedData = HashAndSignBytes(mStream, Key); // Verify the data and display the result to the // console. if(VerifySignedHash(dataBytes, signedData, Key)) { Console.WriteLine("The data was verified."); } else { Console.WriteLine("The data does not match the signature."); } // Close the MemoryStream. mStream.Close(); } catch(ArgumentNullException) { Console.WriteLine("The data was not signed or verified"); } } public static byte[] HashAndSignBytes(Stream DataStream, RSAParameters Key) { try { // Reset the current position in the stream to // the beginning of the stream (0). RSACryptoServiceProvider // can't verify the data unless the the stream position // is set to the starting position of the data. DataStream.Position = 0; // Create a new instance of RSACryptoServiceProvider using the // key from RSAParameters. RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(); RSAalg.ImportParameters(Key); // Hash and sign the data. Pass a new instance of SHA1CryptoServiceProvider // to specify the use of SHA1 for hashing. return RSAalg.SignData(DataStream, new SHA1CryptoServiceProvider()); } catch(CryptographicException e) { Console.WriteLine(e.Message); return null; } } public static bool VerifySignedHash(byte[] DataToVerify, byte[] SignedData, RSAParameters Key) { try { // Create a new instance of RSACryptoServiceProvider using the // key from RSAParameters. RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(); RSAalg.ImportParameters(Key); // Verify the data using the signature. Pass a new instance of SHA1CryptoServiceProvider // to specify the use of SHA1 for hashing. return RSAalg.VerifyData(DataToVerify, new SHA1CryptoServiceProvider(), SignedData); } catch(CryptographicException e) { Console.WriteLine(e.Message); return false; } } }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.