DSACryptoServiceProvider クラス
DSA アルゴリズムの暗号サービス プロバイダ (CSP: Cryptographic Service Provider) 実装にアクセスするためのラッパー オブジェクトを定義します。
この型のすべてのメンバの一覧については、DSACryptoServiceProvider メンバ を参照してください。
System.Object
System.Security.Cryptography.AsymmetricAlgorithm
System.Security.Cryptography.DSA
System.Security.Cryptography.DSACryptoServiceProvider
NotInheritable Public Class DSACryptoServiceProvider
Inherits DSA
[C#]
public sealed class DSACryptoServiceProvider : DSA
[C++]
public __gc __sealed class DSACryptoServiceProvider : public DSA
[JScript]
public class DSACryptoServiceProvider extends DSA
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
デジタル署名は、別のエンティティの ID を認証し、データの整合性を保護するために使用されます。たとえば、公開キー システムを使用してメッセージにデジタル署名を行うには、送信者は最初にメッセージにハッシュ関数を適用して、メッセージのダイジェストを作成します。次に、送信者は、自身の秘密キーでメッセージ ダイジェストを暗号化し、送信者の個人的な署名を作成します。秘密キーは送信者を一意に識別します。受信者は、メッセージと署名を受け取ると、送信者の公開キーを使用して署名を解読してメッセージ ダイジェストを復元し、送信者が使用したものと同じハッシュ アルゴリズムを使用してメッセージをハッシュします。受信者が計算したメッセージ ダイジェストが送信者から受信したメッセージ ダイジェストと完全に一致する場合、受信者はそのメッセージが送信者から送られたものであると見なすことができます。送信者の公開キーは公開されているため、その署名はだれもが検証できることに注意してください。
使用例
Imports System
Imports System.Security.Cryptography
_
Class DSACSPSample
Shared Sub Main()
Try
'Create a new instance of DSACryptoServiceProvider to generate
'a new key pair.
Dim DSA As New DSACryptoServiceProvider()
'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() = DSASignHash(HashValue, DSA.ExportParameters(True), "SHA1")
'Verify the hash and display the results.
If DSAVerifyHash(HashValue, SignedHashValue, DSA.ExportParameters(False), "SHA1") Then
Console.WriteLine("The hash value was verified.")
Else
Console.WriteLine("The hash value was not verified.")
End If
Catch e As ArgumentNullException
Console.WriteLine(e.Message)
End Try
End Sub
Public Shared Function DSASignHash(ByVal HashToSign() As Byte, ByVal DSAKeyInfo As DSAParameters, ByVal HashAlg As String) As Byte()
Try
'Create a new instance of DSACryptoServiceProvider.
Dim DSA As New DSACryptoServiceProvider()
'Import the key information.
DSA.ImportParameters(DSAKeyInfo)
'Create an DSASignatureFormatter object and pass it the
'DSACryptoServiceProvider to transfer the private key.
Dim DSAFormatter As New DSASignatureFormatter(DSA)
'Set the hash algorithm to the passed value.
DSAFormatter.SetHashAlgorithm(HashAlg)
'Create a signature for HashValue and return it.
Return DSAFormatter.CreateSignature(HashToSign)
Catch e As CryptographicException
Console.WriteLine(e.Message)
Return Nothing
End Try
End Function
Public Shared Function DSAVerifyHash(ByVal HashValue() As Byte, ByVal SignedHashValue() As Byte, ByVal DSAKeyInfo As DSAParameters, ByVal HashAlg As String) As Boolean
Try
'Create a new instance of DSACryptoServiceProvider.
Dim DSA As New DSACryptoServiceProvider()
'Import the key information.
DSA.ImportParameters(DSAKeyInfo)
'Create an DSASignatureDeformatter object and pass it the
'DSACryptoServiceProvider to transfer the private key.
Dim DSADeformatter As New DSASignatureDeformatter(DSA)
'Set the hash algorithm to the passed value.
DSADeformatter.SetHashAlgorithm(HashAlg)
'Verify signature and return the result.
Return DSADeformatter.VerifySignature(HashValue, SignedHashValue)
Catch e As CryptographicException
Console.WriteLine(e.Message)
Return False
End Try
End Function
End Class
[C#]
using System;
using System.Security.Cryptography;
class DSACSPSample
{
static void Main()
{
try
{
//Create a new instance of DSACryptoServiceProvider to generate
//a new key pair.
DSACryptoServiceProvider DSA = new DSACryptoServiceProvider();
//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 = DSASignHash(HashValue, DSA.ExportParameters(true), "SHA1");
//Verify the hash and display the results.
if(DSAVerifyHash(HashValue, SignedHashValue, DSA.ExportParameters(false), "SHA1"))
{
Console.WriteLine("The hash value was verified.");
}
else
{
Console.WriteLine("The hash value was not verified.");
}
}
catch(ArgumentNullException e)
{
Console.WriteLine(e.Message);
}
}
public static byte[] DSASignHash(byte[] HashToSign, DSAParameters DSAKeyInfo, string HashAlg)
{
try
{
//Create a new instance of DSACryptoServiceProvider.
DSACryptoServiceProvider DSA = new DSACryptoServiceProvider();
//Import the key information.
DSA.ImportParameters(DSAKeyInfo);
//Create an DSASignatureFormatter object and pass it the
//DSACryptoServiceProvider to transfer the private key.
DSASignatureFormatter DSAFormatter = new DSASignatureFormatter(DSA);
//Set the hash algorithm to the passed value.
DSAFormatter.SetHashAlgorithm(HashAlg);
//Create a signature for HashValue and return it.
return DSAFormatter.CreateSignature(HashToSign);
}
catch(CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
}
public static bool DSAVerifyHash(byte[] HashValue, byte[] SignedHashValue, DSAParameters DSAKeyInfo, string HashAlg)
{
try
{
//Create a new instance of DSACryptoServiceProvider.
DSACryptoServiceProvider DSA = new DSACryptoServiceProvider();
//Import the key information.
DSA.ImportParameters(DSAKeyInfo);
//Create an DSASignatureDeformatter object and pass it the
//DSACryptoServiceProvider to transfer the private key.
DSASignatureDeformatter DSADeformatter = new DSASignatureDeformatter(DSA);
//Set the hash algorithm to the passed value.
DSADeformatter.SetHashAlgorithm(HashAlg);
//Verify signature and return the result.
return DSADeformatter.VerifySignature(HashValue, SignedHashValue);
}
catch(CryptographicException e)
{
Console.WriteLine(e.Message);
return false;
}
}
}
[C++]
#using <mscorlib.dll>
#using <System.dll>
using namespace System;
using namespace System::Security::Cryptography;
Byte DSASignHash(Byte HashToSign[], DSAParameters DSAKeyInfo, String* HashAlg) [] {
try {
//Create a new instance of DSACryptoServiceProvider.
DSACryptoServiceProvider* DSA = new DSACryptoServiceProvider();
//Import the key information.
DSA->ImportParameters(DSAKeyInfo);
//Create an DSASignatureFormatter object and pass it the
//DSACryptoServiceProvider to transfer the private key.
DSASignatureFormatter* DSAFormatter = new DSASignatureFormatter(DSA);
//Set the hash algorithm to the passed value.
DSAFormatter->SetHashAlgorithm(HashAlg);
//Create a signature for HashValue and return it.
return DSAFormatter->CreateSignature(HashToSign);
} catch (CryptographicException* e) {
Console::WriteLine(e->Message);
return 0;
}
}
bool DSAVerifyHash(Byte HashValue[], Byte SignedHashValue[], DSAParameters DSAKeyInfo, String* HashAlg) {
try {
//Create a new instance of DSACryptoServiceProvider.
DSACryptoServiceProvider* DSA = new DSACryptoServiceProvider();
//Import the key information.
DSA->ImportParameters(DSAKeyInfo);
//Create an DSASignatureDeformatter Object* and pass it the
//DSACryptoServiceProvider to transfer the private key.
DSASignatureDeformatter* DSADeformatter = new DSASignatureDeformatter(DSA);
//Set the hash algorithm to the passed value.
DSADeformatter->SetHashAlgorithm(HashAlg);
//Verify signature and return the result.
return DSADeformatter->VerifySignature(HashValue, SignedHashValue);
} catch (CryptographicException* e) {
Console::WriteLine(e->Message);
return false;
}
}
int main() {
try {
//Create a new instance of DSACryptoServiceProvider to generate
//a new key pair.
DSACryptoServiceProvider* DSA = new DSACryptoServiceProvider();
//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[] = DSASignHash(HashValue, DSA->ExportParameters(true), S"SHA1");
//Verify the hash and display the results.
if (DSAVerifyHash(HashValue, SignedHashValue, DSA->ExportParameters(false), S"SHA1")) {
Console::WriteLine(S"The hash value was verified.");
} else {
Console::WriteLine(S"The hash value was not verified.");
}
} catch (ArgumentNullException* e) {
Console::WriteLine(e->Message);
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Security.Cryptography
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: Mscorlib (Mscorlib.dll 内)
参照
DSACryptoServiceProvider メンバ | System.Security.Cryptography 名前空間 | 暗号サービス