次の関数は、署名と検証に証明書を使用します。C#暗号化を使用して署名ハッシュアルゴリズムのフレンドリ名を取得するにはどうすればよいですか?
private static bool Sign_Verify(X509Certificate2 x509, byte[] random_data)
{
//
// Local variable definitions
//
bool isVerified = false;
byte[] buffer = Encoding.Default.GetBytes("Hello World ... !");
byte[] signature_Data = null;
byte[] signature_Hash = null;
//
// Retrieve the private key of the certificate selected.
//
RSACryptoServiceProvider privateKey
= x509.PrivateKey as RSACryptoServiceProvider;
if (null == privateKey)
{
Console.WriteLine("Invalid Private Key");
} // if
else
{
Console.WriteLine("Certificate has private key.");
} // else
HashAlgorithm hashAlgo = HashAlgorithm.Create("SHA256");
byte[] hash = hashAlgo.ComputeHash(random_data);
//
// Perform signing using the private key
try
{
signature_Hash = privateKey.SignHash(
hash,
CryptoConfig.MapNameToOID("SHA256"));
if (null == signature_Hash)
{
Console.WriteLine("Error: SignHash\n\n");
} // if
else
{
Console.WriteLine("Signature_Hash generated......\n\n");
} // else
} // try
catch (CryptographicException)
{
//e.StackTrace();
} // catch
//
// Retrieve the public key of the certificate selected.
//
RSACryptoServiceProvider publicKey
= x509.PublicKey.Key as RSACryptoServiceProvider;
if (null == publicKey)
{
Console.WriteLine("Invalid Public Key");
} // if
else
{
Console.WriteLine("Certificate has public key.");
} // else
isVerified = publicKey.VerifyHash(
hash,
CryptoConfig.MapNameToOID("SHA256"),
signature_Hash);
if (false == isVerified)
{
Console.WriteLine("Signature of Hash verification failed.");
} // if
else
{
Console.WriteLine("Signature of Hash verified successfully.");
} // else
return isVerified;
} // Sign_Verify
HashAlgorithm.Create( "SHA256")では、署名ハッシュアルゴリズムの名前をハードコーディングしています。ハードコーディングする代わりに、証明書の署名ハッシュアルゴリズムの名前を取得する方法?
CmsSignedDataとIDictionaryをが不足している名前空間を持っていると私はSystem.Security.Cryptography.Pkcsとして名前空間を追加しています。それでも同じ名前空間エラーがあります。 – user5271376
.Net Framework 4 0r 4.5がBouncy Castleライブラリをサポートしているかどうかを教えてください。Boucny Castleライブラリは一度も使用していません。 – user5271376
確かにそうです。 nuget package managerを使用する場合は、 "Bouncy Castle"を検索し、そのパッケージをインストールしてください。あなたがナゲットを使用しない場合 - ここではこのライブラリの開発者のサイトに直接リンクしています - http://www.bouncycastle.org/csharp/download/bccrypto-csharp-1.8.1-bin.zip解凍し、dllへの参照をプロジェクトに追加します。 – Evk