本文整理匯總了C#中System.Security.Cryptography.RSACryptoServiceProvider.SignHash方法的典型用法代碼示例。如果您正苦於以下問題:C# RSACryptoServiceProvider.SignHash方法的具體用法?C# RSACryptoServiceProvider.SignHash怎麽用?C# RSACryptoServiceProvider.SignHash使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類System.Security.Cryptography.RSACryptoServiceProvider
的用法示例。
在下文中一共展示了RSACryptoServiceProvider.SignHash方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: Main
//引入命名空間
using System;
using System.Text;
using System.Security.Cryptography;
namespace RSACryptoServiceProvider_Examples
{
class MyMainClass
{
static void Main()
{
byte[] toEncrypt;
byte[] encrypted;
byte[] signature;
//Choose a small amount of data to encrypt.
string original = "Hello";
ASCIIEncoding myAscii = new ASCIIEncoding();
//Create a sender and receiver.
Sender mySender = new Sender();
Receiver myReceiver = new Receiver();
//Convert the data string to a byte array.
toEncrypt = myAscii.GetBytes(original);
//Encrypt data using receiver's public key.
encrypted = mySender.EncryptData(myReceiver.PublicParameters, toEncrypt);
//Hash the encrypted data and generate a signature on the hash
// using the sender's private key.
signature = mySender.HashAndSign(encrypted);
Console.WriteLine("Original: {0}", original);
//Verify the signature is authentic using the sender's public key.
if (myReceiver.VerifyHash(mySender.PublicParameters, encrypted, signature))
{
//Decrypt the data using the receiver's private key.
myReceiver.DecryptData(encrypted);
}
else
{
Console.WriteLine("Invalid signature");
}
}
}
class Sender
{
RSAParameters rsaPubParams;
RSAParameters rsaPrivateParams;
public Sender()
{
RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
//Generate public and private key data.
rsaPrivateParams = rsaCSP.ExportParameters(true);
rsaPubParams = rsaCSP.ExportParameters(false);
}
public RSAParameters PublicParameters
{
get
{
return rsaPubParams;
}
}
//Manually performs hash and then signs hashed value.
public byte[] HashAndSign(byte[] encrypted)
{
RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
SHA1Managed hash = new SHA1Managed();
byte[] hashedData;
rsaCSP.ImportParameters(rsaPrivateParams);
hashedData = hash.ComputeHash(encrypted);
return rsaCSP.SignHash(hashedData, CryptoConfig.MapNameToOID("SHA1"));
}
//Encrypts using only the public key data.
public byte[] EncryptData(RSAParameters rsaParams, byte[] toEncrypt)
{
RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
rsaCSP.ImportParameters(rsaParams);
return rsaCSP.Encrypt(toEncrypt, false);
}
}
class Receiver
{
RSAParameters rsaPubParams;
RSAParameters rsaPrivateParams;
public Receiver()
{
RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
//Generate public and private key data.
rsaPrivateParams = rsaCSP.ExportParameters(true);
rsaPubParams = rsaCSP.ExportParameters(false);
}
public RSAParameters PublicParameters
{
get
{
return rsaPubParams;
}
}
//Manually performs hash and then verifies hashed value.
public bool VerifyHash(RSAParameters rsaParams, byte[] signedData, byte[] signature)
{
RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
SHA1Managed hash = new SHA1Managed();
byte[] hashedData;
rsaCSP.ImportParameters(rsaParams);
bool dataOK = rsaCSP.VerifyData(signedData, CryptoConfig.MapNameToOID("SHA1"), signature);
hashedData = hash.ComputeHash(signedData);
return rsaCSP.VerifyHash(hashedData, CryptoConfig.MapNameToOID("SHA1"), signature);
}
//Decrypt using the private key data.
public void DecryptData(byte[] encrypted)
{
byte[] fromEncrypt;
string roundTrip;
ASCIIEncoding myAscii = new ASCIIEncoding();
RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
rsaCSP.ImportParameters(rsaPrivateParams);
fromEncrypt = rsaCSP.Decrypt(encrypted, false);
roundTrip = myAscii.GetString(fromEncrypt);
Console.WriteLine("RoundTrip: {0}", roundTrip);
}
}
}