AsymmetricAlgorithm クラス
アセンブリ: mscorlib (mscorlib.dll 内)

<ComVisibleAttribute(True)> _ Public MustInherit Class AsymmetricAlgorithm Implements IDisposable

非対称暗号アルゴリズムは公開キー アルゴリズムとも呼ばれますが、送信者と受信者の双方が関連キーのペア (秘密キーと公開キー) を保持していることが必要です。いずれのキーもエンティティに対して一意です。公開キーはだれでも利用でき、受信者に送信されるデータのエンコーディングに使用されます。秘密キーは第三者に知られないように受信者が保管しておく必要があります。受信者の公開キーを使ってエンコードされたメッセージは、このキーを使ってデコードします。RSACryptoServiceProvider クラスは公開キー アルゴリズムの実装です。
公開キー システムを使用してデジタル署名を記述することもできます。デジタル署名は、データの整合性を保護する目的で使用されます。たとえば、公開キー システムを使用してメッセージにデジタル署名を行うには、送信者は最初にメッセージにハッシュ関数を適用して、メッセージのダイジェストを作成します。送信者はメッセージ ダイジェストを自分の秘密キーで暗号化し、送信者の個人署名を作成します。受信者は、メッセージと署名を受け取ると、送信者の公開キーを使用して署名を解読してメッセージ ダイジェストを復元し、送信者が使用したものと同じハッシュ アルゴリズムを使用してメッセージをハッシュします。受信者が計算したメッセージ ダイジェストが送信者から受信したメッセージ ダイジェストと一致する場合、受信者はそのメッセージが送信中に改変されていないと見なすことができます。送信者の公開キーは公開されています。だれもが署名を検証できることに注意してください。この方法ではメッセージを秘密にすることはできません。メッセージを秘密にするには暗号化も行う必要があります。
DSACryptoServiceProvider クラスはデジタル署名アルゴリズムの実装です。また、RSACryptoServiceProvider を使用してデジタル署名を作成し、検証することもできます。
System.Security.Cryptography 名前空間では、RSA および DSA だけに具象クラスが用意されています。

AsymmetricAlgorithm クラスから継承したカスタムの非対称アルゴリズムを実装する方法を次のコード例に示します。また、カスタム クラスの使用方法を示すクラスが追加されています。
Imports System Imports System.Xml Imports System.Text Imports System.Security.Cryptography Imports System.Reflection <Assembly: AssemblyKeyFile("CustomCrypto.snk")> <Assembly: AssemblyVersion("1.0.0.0")> <Assembly: CLSCompliant(True)> Namespace Contoso ' Define a vbCustomCrypto class that inherits from the AsymmetricAlgorithm ' class. Class vbCustomCrypto Inherits System.Security.Cryptography.AsymmetricAlgorithm ' Declare local member variables. Private cspParameters As CspParameters Private ReadOnly keySizes() As keySizes = {New keySizes(8, 64, 8)} ' Initialize a vbCustomCrypto with the default key size of 8. Public Sub New() Me.KeySize = 8 End Sub ' Initialize a vbCustomCrypto with the specified key size. Public Sub New(ByVal keySize As Integer) Me.KeySize = keySize End Sub ' Modify the KeySizeValue property inherited from the Asymmetric ' class. Prior to setting the value, ensure it falls within the ' range identified in the local keySizes member variable. Public Overrides Property KeySize() As Integer Get Return KeySizeValue End Get Set(ByVal Value As Integer) For i As Int16 = 0 To keySizes.Length - 1 Step i If (keySizes(i).SkipSize.Equals(0)) Then If (keySizes(i).MinSize.Equals(Value)) Then KeySizeValue = Value Return End If Else For j As Integer = keySizes(i).MinSize _ To keySizes(i).MaxSize _ Step keySizes(i).SkipSize If (j.Equals(Value)) Then KeySizeValue = Value Return End If Next End If Next ' If the key does not fall within the range identified ' in the keySizes member variable, throw an exception. Throw New CryptographicException("Invalid key size.") End Set End Property ' Accessor function for keySizes member variable. public Overrides Readonly Property LegalKeySizes as KeySizes() Get Return keySizes End Get End Property ' Initialize the parameters with default values. Public Sub InitializeParameters() cspParameters = New CspParameters cspParameters.ProviderName = "Contoso" cspParameters.KeyContainerName = "SecurityBin1" cspParameters.KeyNumber = 1 cspParameters.ProviderType = 2 End Sub ' Parse specified xmlString for values to populate the CspParams ' Expected XML schema: ' <CustomCryptoKeyValue> ' <ProviderName></ProviderName> ' <KeyContainerName></KeyContainerName> ' <KeyNumber></KeyNumber> ' <ProviderType></ProviderType> ' </CustomCryptoKeyValue> Public Overrides Sub FromXmlString(ByVal xmlString As String) If Not xmlString Is Nothing Then Dim doc As New XmlDocument doc.LoadXml(xmlString) Dim firstNode As XmlNode = doc.FirstChild Dim nodeList As XmlNodeList ' Assemble parameters from values in each XML element. cspParameters = New CspParameters ' KeyContainerName is optional. nodeList = doc.GetElementsByTagName("KeyContainerName") Dim keyName As String = nodeList.Item(0).InnerText If Not keyName Is Nothing Then cspParameters.KeyContainerName = keyName End If ' KeyNumber is optional. nodeList = doc.GetElementsByTagName("KeyNumber") Dim keyNumber As String = nodeList.Item(0).InnerText If Not keyNumber Is Nothing Then cspParameters.KeyNumber = Int32.Parse(keyNumber) End If ' ProviderName is optional. nodeList = doc.GetElementsByTagName("ProviderName") Dim providerName As String = nodeList.Item(0).InnerText If Not providerName Is Nothing Then cspParameters.ProviderName = providerName End If ' ProviderType is optional. nodeList = doc.GetElementsByTagName("ProviderType") Dim providerType As String = nodeList.Item(0).InnerText If Not providerType Is Nothing Then cspParameters.ProviderType = Int32.Parse(providerType) End If Else Throw New ArgumentNullException("xmlString") End If End Sub ' Create an XML string representation of the parameters in the current ' vbCustomCrypto object. Public Overrides Function ToXmlString( _ ByVal includePrivateParameters As Boolean) As String Dim keyContainerName As String = "" Dim keyNumber As String = "" Dim providerName As String = "" Dim providerType As String = "" If Not cspParameters Is Nothing Then keyContainerName = cspParameters.KeyContainerName keyNumber = cspParameters.KeyNumber.ToString() providerName = cspParameters.ProviderName providerType = cspParameters.ProviderType.ToString() End If Dim xmlBuilder As New StringBuilder xmlBuilder.Append("<CustomCryptoKeyValue>") xmlBuilder.Append("<KeyContainerName>") xmlBuilder.Append(keyContainerName) xmlBuilder.Append("</KeyContainerName>") xmlBuilder.Append("<KeyNumber>") xmlBuilder.Append(keyNumber) xmlBuilder.Append("</KeyNumber>") xmlBuilder.Append("<ProviderName>") xmlBuilder.Append(providerName) xmlBuilder.Append("</ProviderName>") xmlBuilder.Append("<ProviderType>") xmlBuilder.Append(providerType) xmlBuilder.Append("</ProviderType>") xmlBuilder.Append("</CustomCryptoKeyValue>") Return (xmlBuilder.ToString()) End Function ' Return the name for the key exchange algorithm. Public Overrides ReadOnly Property KeyExchangeAlgorithm() As String Get Return "RSA-PKCS1-KeyEx" End Get End Property ' Retrieves the name of the signature alogrithm. Public Overrides ReadOnly Property SignatureAlgorithm() As String Get Return "http://www.w3.org/2000/09/xmldsig#rsa-sha1" End Get End Property ' Required member for implementing the AsymmetricAlgorithm class. Protected Overrides Sub Dispose(ByVal disposing As Boolean) End Sub ' The create function attempts to create a vbCustomCrypto object using ' the assembly name. This functionality requires modification of the ' machine.config file. Add the following section to the configuration ' element and modify the values of the cryptoClass to reflect what is ' installed in your machines GAC. '<mscorlib> ' <cryptographySettings> ' <cryptoNameMapping> ' <cryptoClasses> ' <cryptoClass vbCustomCrypto="Contoso.vbCustomCrypto, ' vbCustomCrypto, ' Culture=neutral, ' PublicKeyToken=fdb9f9c4851028bf, ' Version=1.0.1448.27640" /> ' </cryptoClasses> ' <nameEntry name="Contoso.vbCustomCrypto" ' class="vbCustomCrypto" /> ' <nameEntry name="vbCustomCrypto" class="vbCustomCrypto" /> ' </cryptoNameMapping> ' </cryptographySettings> '</mscorlib> Public Shadows Function Create() As vbCustomCrypto Return Create("vbCustomCrypto") End Function ' Create a CustomCrypto object by calling CrytoConfig's ' CreateFromName method and casting the type to CustomCrypto. ' The create function attempts to create a vbCustomCrypto object using ' the assembly name. This functionality requires modification of the ' machine.config file. Add the following section to the configuration ' element and modify the values of the cryptoClass to reflect what is ' installed in your machines GAC. '<mscorlib> ' <cryptographySettings> ' <cryptoNameMapping> ' <cryptoClasses> ' <cryptoClass vbCustomCrypto="Contoso.vbCustomCrypto, ' vbCustomCrypto, ' Culture=neutral, ' PublicKeyToken=fdb9f9c4851028bf, ' Version=1.0.1448.27640" /> ' </cryptoClasses> ' <nameEntry name="Contoso.vbCustomCrypto" ' class="vbCustomCrypto" /> ' <nameEntry name="vbCustomCrypto" class="vbCustomCrypto" /> ' </cryptoNameMapping> ' </cryptographySettings> '</mscorlib> Public Shadows Function Create( _ ByVal algorithmName As String) As vbCustomCrypto Return CType( _ CryptoConfig.CreateFromName(algorithmName), _ vbCustomCrypto) End Function End Class Class Form1 Inherits System.Windows.Forms.Form ' Event handler for Run button. Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click tbxOutput.Cursor = Cursors.WaitCursor tbxOutput.Text = "" ' Construct a CustomCrypto object and initialize its ' CspParameters. Dim customCrypto As New Contoso.vbCustomCrypto customCrypto.InitializeParameters() ' Display properties of the current vbCustomCrypto object. WriteLine("*** CustomCrypto created with default parameters:") DisplayProperties(customCrypto) ' Release all the resources used by this instance of CustomCrytpo. customCrypto.Clear() customCrypto = New Contoso.vbCustomCrypto(64) ' Create new parameters and set them by using the ' FromXmlString method. Dim parameterXml As String = "<CustomCryptoKeyValue>" parameterXml += "<ProviderName>Contoso</ProviderName>" parameterXml += "<KeyContainerName>SecurityBin2" parameterXml += "</KeyContainerName>" parameterXml += "<KeyNumber>1</KeyNumber>" parameterXml += "<ProviderType>2</ProviderType>" parameterXml += "</CustomCryptoKeyValue>" customCrypto.FromXmlString(parameterXml) ' Display the properties of a customCrypto object created with ' custom parameters. WriteLine(vbCrLf + "*** " + _ "CustomCrypto created with custom parameters:") DisplayProperties(customCrypto) ' Create an object by using the assembly name. Try Dim createdCrypto As Contoso.vbCustomCrypto createdCrypto = customCrypto.Create("vbCustomCrypto") If (Not createdCrypto Is Nothing) Then Write(vbCrLf + "*** Successfully created vbCustomCrytpo ") WriteLine("from the Create method.") DisplayProperties(createdCrypto) Else Write("Unable to create CustomCrytpo from ") WriteLine(" the Create method.") End If Catch ex As Exception WriteLine(ex.ToString()) End Try ' Align interface and conclude application. WriteLine("This sample completed successfully;" + _ " press Exit to continue.") ' Reset the cursor. tbxOutput.Cursor = Cursors.Default End Sub ' Display the properties of the specified CustomCrypto object to ' the output texbox. Public Sub DisplayProperties( _ ByVal customCrypto As Contoso.vbCustomCrypto) Try ' Retrieve the class description for the customCrypto object. Dim classDescription As String = customCrypto.ToString() WriteLine(classDescription) WriteLine("KeyExchangeAlgorithm: " + _ customCrypto.KeyExchangeAlgorithm) WriteLine("SignatureAlgorithm: " + _ customCrypto.SignatureAlgorithm) WriteLine("KeySize: " + customCrypto.KeySize.ToString()) WriteLine("Parameters described in Xml format:") WriteLine(customCrypto.ToXmlString(True)) ' Display the MinSize, MaxSize, and SkipSize properties of ' each KeySize item in the local keySizes member variable. Dim legalKeySizes() As KeySizes = customCrypto.LegalKeySizes If (legalKeySizes.Length > 0) Then For i As Integer = 0 To legalKeySizes.Length - 1 Step 1 Write("Keysize" + i.ToString() + " min, max, step: ") Write(legalKeySizes(i).MinSize.ToString() + ", ") Write(legalKeySizes(i).MaxSize.ToString() + ", ") Write(legalKeySizes(i).SkipSize.ToString() + ", ") WriteLine("") Next End If Catch ex As Exception WriteLine("Caught unexpected exception: " + ex.ToString()) End Try End Sub ' Write the specified message and carriage return to the output ' textbox. Private Sub WriteLine(ByVal message As String) tbxOutput.AppendText(message + vbCrLf) End Sub ' Write the specified message to the output textbox. Private Sub Write(ByVal message As String) tbxOutput.AppendText(message) End Sub ' Event handler for Exit button. Private Sub Button2_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form 'Designer. It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. Friend WithEvents Panel2 As System.Windows.Forms.Panel Friend WithEvents Panel1 As System.Windows.Forms.Panel Friend WithEvents Button1 As System.Windows.Forms.Button Friend WithEvents Button2 As System.Windows.Forms.Button Friend WithEvents tbxOutput As System.Windows.Forms.RichTextBox <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.Panel2 = New System.Windows.Forms.Panel Me.Button1 = New System.Windows.Forms.Button Me.Button2 = New System.Windows.Forms.Button Me.Panel1 = New System.Windows.Forms.Panel Me.tbxOutput = New System.Windows.Forms.RichTextBox Me.Panel2.SuspendLayout() Me.Panel1.SuspendLayout() Me.SuspendLayout() ' 'Panel2 ' Me.Panel2.Controls.Add(Me.Button1) Me.Panel2.Controls.Add(Me.Button2) Me.Panel2.Dock = System.Windows.Forms.DockStyle.Bottom Me.Panel2.DockPadding.All = 20 Me.Panel2.Location = New System.Drawing.Point(0, 320) Me.Panel2.Name = "Panel2" Me.Panel2.Size = New System.Drawing.Size(616, 64) Me.Panel2.TabIndex = 1 ' 'Button1 ' Me.Button1.Dock = System.Windows.Forms.DockStyle.Right Me.Button1.Font = New System.Drawing.Font( _ "Microsoft Sans Serif", _ 9.0!, _ System.Drawing.FontStyle.Regular, _ System.Drawing.GraphicsUnit.Point, _ CType(0, Byte)) Me.Button1.Location = New System.Drawing.Point(446, 20) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(75, 24) Me.Button1.TabIndex = 2 Me.Button1.Text = "&Run" ' 'Button2 ' Me.Button2.Dock = System.Windows.Forms.DockStyle.Right Me.Button2.Font = New System.Drawing.Font( _ "Microsoft Sans Serif", _ 9.0!, _ System.Drawing.FontStyle.Regular, _ System.Drawing.GraphicsUnit.Point, _ CType(0, Byte)) Me.Button2.Location = New System.Drawing.Point(521, 20) Me.Button2.Name = "Button2" Me.Button2.Size = New System.Drawing.Size(75, 24) Me.Button2.TabIndex = 3 Me.Button2.Text = "E&xit" ' 'Panel1 ' Me.Panel1.Controls.Add(Me.tbxOutput) Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill Me.Panel1.DockPadding.All = 20 Me.Panel1.Location = New System.Drawing.Point(0, 0) Me.Panel1.Name = "Panel1" Me.Panel1.Size = New System.Drawing.Size(616, 320) Me.Panel1.TabIndex = 2 ' 'tbxOutput ' Me.tbxOutput.AccessibleDescription = _ "Displays output from application." Me.tbxOutput.AccessibleName = "Output textbox." Me.tbxOutput.Dock = System.Windows.Forms.DockStyle.Fill Me.tbxOutput.Location = New System.Drawing.Point(20, 20) Me.tbxOutput.Name = "tbxOutput" Me.tbxOutput.Size = New System.Drawing.Size(576, 280) Me.tbxOutput.TabIndex = 1 Me.tbxOutput.Text = "Click the Run button to run the application." ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) Me.ClientSize = New System.Drawing.Size(616, 384) Me.Controls.Add(Me.Panel1) Me.Controls.Add(Me.Panel2) Me.Name = "Form1" Me.Text = "AsymmetricAlgorithm" Me.Panel2.ResumeLayout(False) Me.Panel1.ResumeLayout(False) Me.ResumeLayout(False) End Sub End Class End Namespace ' ' This sample produces the following output: ' ' *** CustomCrypto created with default parameters: ' Contoso.vbCustomCrypto ' KeyExchangeAlgorithm: RSA-PKCS1-KeyEx ' SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 ' KeySize: 8 ' Parameters described in Xml format: ' <CustomCryptoKeyValue><KeyContainerName>SecurityBin1</KeyContainerName> ' <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> ' <ProviderType>2</ProviderType></CustomCryptoKeyValue> ' Keysize0 min, max, step: 8, 64, 8, ' ' *** CustomCrypto created with custom parameters: ' Contoso.vbCustomCrypto ' KeyExchangeAlgorithm: RSA-PKCS1-KeyEx ' SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 ' KeySize: 64 ' Parameters described in Xml format: ' <CustomCryptoKeyValue><KeyContainerName>SecurityBin2</KeyContainerName> ' <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> ' <ProviderType>2</ProviderType></CustomCryptoKeyValue> ' Keysize0 min, max, step: 8, 64, 8, ' Unable to create CustomCrytpo from the Create method ' This sample completed successfully; press Enter to exit.
using System; using System.Xml; using System.Text; using System.Security.Cryptography; using System.Reflection; [assembly: AssemblyKeyFile("CustomCrypto.snk")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: CLSCompliant(true)] namespace Contoso { // Define a CustomCrypto class that inherits from the AsymmetricAlgorithm // class. public class CustomCrypto : System.Security.Cryptography.AsymmetricAlgorithm { // Declare local member variables. private CspParameters cspParameters; private readonly KeySizes[] keySizes = {new KeySizes(8, 64, 8)}; // Initialize a CustomCrypto with the default key size of 8. public CustomCrypto() { this.KeySize = 8; } // Initialize a CustomCrypto with the specified key size. public CustomCrypto(int keySize) { this.KeySize = keySize; } // Accessor function for keySizes member variable. public override KeySizes[] LegalKeySizes { get { return (KeySizes[])keySizes.Clone(); } } // Modify the KeySizeValue property inherited from the Asymmetric // class. Prior to setting the value, ensure it falls within the // range identified in the local keySizes member variable. public override int KeySize { get { return KeySizeValue; } set { for (int i=0; i < keySizes.Length; i++) { if (keySizes[i].SkipSize == 0) { if (keySizes[i].MinSize == value) { KeySizeValue = value; return; } } else { for (int j = keySizes[i].MinSize; j <= keySizes[i].MaxSize; j += keySizes[i].SkipSize) { if (j == value) { KeySizeValue = value; return; } } } } // If the key does not fall within the range identified // in the keySizes member variable, throw an exception. throw new CryptographicException("Invalid key size."); } } // Initialize the parameters with default values. public void InitializeParameters() { cspParameters = new CspParameters(); cspParameters.ProviderName = "Contoso"; cspParameters.KeyContainerName = "SecurityBin1"; cspParameters.KeyNumber = 1; cspParameters.ProviderType = 2; } // Parse specified xmlString for values to populate the CspParams // Expected XML schema: // <CustomCryptoKeyValue> // <ProviderName></ProviderName> // <KeyContainerName></KeyContainerName> // <KeyNumber></KeyNumber> // <ProviderType></ProviderType> // </CustomCryptoKeyValue> public override void FromXmlString(string xmlString) { if (xmlString != null) { XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlString); XmlNode firstNode = doc.FirstChild; XmlNodeList nodeList; // Assemble parameters from values in each XML element. cspParameters = new CspParameters(); // KeyContainerName is optional. nodeList = doc.GetElementsByTagName("KeyContainerName"); string keyName = nodeList.Item(0).InnerText; if (keyName != null) { cspParameters.KeyContainerName = keyName; } // KeyNumber is optional. nodeList = doc.GetElementsByTagName("KeyNumber"); string keyNumber = nodeList.Item(0).InnerText; if (keyNumber != null) { cspParameters.KeyNumber = Int32.Parse(keyNumber); } // ProviderName is optional. nodeList = doc.GetElementsByTagName("ProviderName"); string providerName = nodeList.Item(0).InnerText; if (providerName != null) { cspParameters.ProviderName = providerName; } // ProviderType is optional. nodeList = doc.GetElementsByTagName("ProviderType"); string providerType = nodeList.Item(0).InnerText; if (providerType != null) { cspParameters.ProviderType = Int32.Parse(providerType); } } else { throw new ArgumentNullException("xmlString"); } } // Create an XML string representation of the parameters in the // current customCrypto object. public override string ToXmlString(bool includePrivateParameters) { string keyContainerName = ""; string keyNumber = ""; string providerName = ""; string providerType = ""; if (cspParameters != null) { keyContainerName = cspParameters.KeyContainerName; keyNumber = cspParameters.KeyNumber.ToString(); providerName = cspParameters.ProviderName; providerType = cspParameters.ProviderType.ToString(); } StringBuilder sb = new StringBuilder(); sb.Append("<CustomCryptoKeyValue>"); sb.Append("<KeyContainerName>"); sb.Append(keyContainerName); sb.Append("</KeyContainerName>"); sb.Append("<KeyNumber>"); sb.Append(keyNumber); sb.Append("</KeyNumber>"); sb.Append("<ProviderName>"); sb.Append(providerName); sb.Append("</ProviderName>"); sb.Append("<ProviderType>"); sb.Append(providerType); sb.Append("</ProviderType>"); sb.Append("</CustomCryptoKeyValue>"); return(sb.ToString()); } // Return the name for the key exchange algorithm. public override string KeyExchangeAlgorithm { get {return "RSA-PKCS1-KeyEx";} } // Retrieves the name of the signature alogrithm. public override string SignatureAlgorithm { get {return "http://www.w3.org/2000/09/xmldsig#rsa-sha1";} } // Required member for implementing the AsymmetricAlgorithm class. protected override void Dispose(bool disposing) {} // Call the Create method using the CustomCrypto assembly name. // The create function attempts to create a CustomCrypto object using // the assembly name. This functionality requires modification of the // machine.config file. Add the following section to the configuration // element and modify the values of the cryptoClass to reflect what is // installed in your machines GAC. //<mscorlib> // <cryptographySettings> // <cryptoNameMapping> // <cryptoClasses> // <cryptoClass CustomCrypto="Contoso.CustomCrypto, // CustomCrypto, // Culture=neutral, // PublicKeyToken=fdb9f9c4851028bf, // Version=1.0.1448.27640" /> // </cryptoClasses> // <nameEntry name="Contoso.CustomCrypto" class="CustomCrypto" /> // <nameEntry name="CustomCrypto" class="CustomCrypto" /> // </cryptoNameMapping> // </cryptographySettings> //</mscorlib> new static public CustomCrypto Create() { return Create("CustomCrypto"); } // Create a CustomCrypto object by calling CrytoConfig's // CreateFromName method and casting the type to CustomCrypto. // The create function attempts to create a CustomCrypto object using // the assembly name. This functionality requires modification of the // machine.config file. Add the following section to the configuration // element and modify the values of the cryptoClass to reflect what is // installed in your machines GAC. //<mscorlib> // <cryptographySettings> // <cryptoNameMapping> // <cryptoClasses> // <cryptoClass CustomCrypto="Contoso.CustomCrypto, // CustomCrypto, // Culture=neutral, // PublicKeyToken=fdb9f9c4851028bf, // Version=1.0.1448.27640" /> // </cryptoClasses> // <nameEntry name="Contoso.CustomCrypto" class="CustomCrypto" /> // <nameEntry name="CustomCrypto" class="CustomCrypto" /> // </cryptoNameMapping> // </cryptographySettings> //</mscorlib> new static public CustomCrypto Create(String algorithmName) { return (CustomCrypto) CryptoConfig.CreateFromName(algorithmName); } } class CustomCryptoImpl { [STAThread] static void Main(string[] args) { // Construct a CustomCrypto object and initialize its // CspParameters. CustomCrypto customCrypto = new CustomCrypto(); customCrypto.InitializeParameters(); // Display properties of the current customCrypto object. Console.WriteLine("*** CustomCrypto created with default " + "parameters:"); DisplayProperties(customCrypto); // Release all the resources used by this instance of // CustomCrytpo. customCrypto.Clear(); customCrypto = new CustomCrypto(64); // Create new parameters and set them by using the FromXmlString // method. string parameterXml = "<CustomCryptoKeyValue>"; parameterXml += "<ProviderName>Contoso</ProviderName>"; parameterXml += "<KeyContainerName>SecurityBin2"; parameterXml += "</KeyContainerName>"; parameterXml += "<KeyNumber>1</KeyNumber>"; parameterXml += "<ProviderType>2</ProviderType>"; parameterXml += "</CustomCryptoKeyValue>"; customCrypto.FromXmlString(parameterXml); // Display the properties of a customCrypto object created with // custom parameters. Console.WriteLine("\n*** " + "CustomCrypto created with custom parameters:"); DisplayProperties(customCrypto); // Create an object by using the assembly name. try { CustomCrypto myCryptoA = CustomCrypto.Create("CustomCrypto"); if (myCryptoA != null) { Console.Write("\n*** " + "Successfully created CustomCrytpo from"); Console.WriteLine(" the Create method."); DisplayProperties(myCryptoA); } else { Console.Write("Unable to create CustomCrytpo from "); Console.WriteLine(" the Create method."); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.WriteLine("This sample completed successfully; " + "press Enter to exit."); Console.ReadLine(); } // Display the properties of the specified CustomCrypto object to the // console. public static void DisplayProperties(CustomCrypto customCrypto) { try { // Retrieve the class description for the customCrypto object. string classDescription = customCrypto.ToString(); Console.WriteLine(classDescription); Console.Write("KeyExchangeAlgorithm: "); Console.WriteLine(customCrypto.KeyExchangeAlgorithm); Console.Write("SignatureAlgorithm: "); Console.WriteLine(customCrypto.SignatureAlgorithm); Console.WriteLine("KeySize: " + customCrypto.KeySize); Console.WriteLine("Parameters described in Xml format:"); Console.WriteLine(customCrypto.ToXmlString(true)); // Display the MinSize, MaxSize, and SkipSize properties of // each KeySize item in the local keySizes member variable. KeySizes[] legalKeySizes = customCrypto.LegalKeySizes; if (legalKeySizes.Length > 0) { for (int i=0; i < legalKeySizes.Length; i++) { Console.Write("Keysize" + i + " min, max, step: "); Console.Write(legalKeySizes[i].MinSize + ", "); Console.Write(legalKeySizes[i].MaxSize + ", "); Console.WriteLine(legalKeySizes[i].SkipSize + ", "); } } } catch (Exception ex) { Console.WriteLine("Caught unexpected exception: " + ex.ToString()); } } } } // // This sample produces the following output: // // *** CustomCrypto created with default parameters: // Contoso.vbCustomCrypto // KeyExchangeAlgorithm: RSA-PKCS1-KeyEx // SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 // KeySize: 8 // Parameters described in Xml format: // <CustomCryptoKeyValue><KeyContainerName>SecurityBin1</KeyContainerName> // <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> // <ProviderType>2</ProviderType></CustomCryptoKeyValue> // Keysize0 min, max, step: 8, 64, 8, // // *** CustomCrypto created with custom parameters: // Contoso.vbCustomCrypto // KeyExchangeAlgorithm: RSA-PKCS1-KeyEx // SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 // KeySize: 64 // Parameters described in Xml format: // <CustomCryptoKeyValue><KeyContainerName>SecurityBin2</KeyContainerName> // <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> // <ProviderType>2</ProviderType></CustomCryptoKeyValue> // Keysize0 min, max, step: 8, 64, 8, // Unable to create CustomCrytpo from the Create method // This sample completed successfully; press Exit to continue.
#using <System.Xml.dll> #using <System.Security.dll> using namespace System; using namespace System::Xml; using namespace System::Text; using namespace System::Security::Cryptography; using namespace System::Reflection; [assembly: AssemblyKeyFile("CustomCrypto.snk")]; [assembly: AssemblyVersion("1.0.0.0")]; [assembly: CLSCompliant(true)]; namespace Contoso { // Define a CustomCrypto class that inherits from the AsymmetricAlgorithm // class. public ref class CustomCrypto : public System::Security::Cryptography::AsymmetricAlgorithm { // Declare local member variables. private: CspParameters^ cryptoServiceParameters; array<KeySizes^>^ customValidKeySizes; // Initialize a CustomCrypto with the default key size of 8. public: CustomCrypto() { customValidKeySizes = gcnew array<KeySizes^>{gcnew KeySizes(8, 64, 8)}; this->KeySize = 8; } // Initialize a CustomCrypto with the specified key size. public: CustomCrypto(int keySize) { customValidKeySizes = gcnew array<KeySizes^>{gcnew KeySizes(8, 64, 8)}; this->KeySize = keySize; } // Accessor function for keySizes member variable. public: property array<KeySizes^>^ LegalKeySizes { virtual array<KeySizes^>^ get() override { return (array<KeySizes^>^)customValidKeySizes->Clone(); } } // Modify the KeySizeValue property inherited from the Asymmetric // class. Prior to setting the value, ensure it falls within the // range identified in the local keySizes member variable. public: property int KeySize { virtual int get() override { return KeySizeValue; } virtual void set(int value) override { for (int i = 0; i < customValidKeySizes->Length; i++) { if (customValidKeySizes[i]->SkipSize == 0) { if (customValidKeySizes[i]->MinSize == value) { KeySizeValue = value; return; } } else { for (int j = customValidKeySizes[i]->MinSize; j <= customValidKeySizes[i]->MaxSize; j += customValidKeySizes[i]->SkipSize) { if (j == value) { KeySizeValue = value; return; } } } } // If the key does not fall within the range identified // in the keySizes member variable, throw an exception. throw gcnew CryptographicException("Invalid key size."); } } // Initialize the parameters with default values. public: void InitializeParameters() { cryptoServiceParameters = gcnew CspParameters(); cryptoServiceParameters->ProviderName = "Contoso"; cryptoServiceParameters->KeyContainerName = "SecurityBin1"; cryptoServiceParameters->KeyNumber = 1; cryptoServiceParameters->ProviderType = 2; } // Parse specified xmlString for values to populate the CspParams // Expected XML schema: // <CustomCryptoKeyValue> // <ProviderName></ProviderName> // <KeyContainerName></KeyContainerName> // <KeyNumber></KeyNumber> // <ProviderType></ProviderType> // </CustomCryptoKeyValue> public: virtual void FromXmlString(String^ xmlString) override { if (xmlString != nullptr) { XmlDocument^ document = gcnew XmlDocument(); document->LoadXml(xmlString); XmlNode^ firstNode = document->FirstChild; XmlNodeList^ nodeList; // Assemble parameters from values in each XML element. cryptoServiceParameters = gcnew CspParameters(); // KeyContainerName is optional. nodeList = document->GetElementsByTagName("KeyContainerName"); if (nodeList->Count > 0) { cryptoServiceParameters->KeyContainerName = nodeList->Item(0)->InnerText; } // KeyNumber is optional. nodeList = document->GetElementsByTagName("KeyNumber"); if (nodeList->Count > 0) { cryptoServiceParameters->KeyNumber = Int32::Parse(nodeList->Item(0)->InnerText); } // ProviderName is optional. nodeList = document->GetElementsByTagName("ProviderName"); if (nodeList->Count > 0) { cryptoServiceParameters->ProviderName = nodeList->Item(0)->InnerText; } // ProviderType is optional. nodeList = document->GetElementsByTagName("ProviderType"); if (nodeList->Count > 0) { cryptoServiceParameters->ProviderType = Int32::Parse(nodeList->Item(0)->InnerText); } } else { throw gcnew ArgumentNullException("xmlString"); } } // Create an XML string representation of the parameters in the // current customCrypto object. public: virtual String^ ToXmlString(bool includePrivateParameters) override { String^ keyContainerName = ""; String^ keyNumber = ""; String^ providerName = ""; String^ providerType = ""; if (cryptoServiceParameters != nullptr) { keyContainerName = cryptoServiceParameters->KeyContainerName; keyNumber = cryptoServiceParameters->KeyNumber.ToString(); providerName = cryptoServiceParameters->ProviderName; providerType = cryptoServiceParameters->ProviderType.ToString(); } StringBuilder^ sb = gcnew StringBuilder(); sb->Append("<CustomCryptoKeyValue>"); sb->Append("<KeyContainerName>"); sb->Append(keyContainerName); sb->Append("</KeyContainerName>"); sb->Append("<KeyNumber>"); sb->Append(keyNumber); sb->Append("</KeyNumber>"); sb->Append("<ProviderName>"); sb->Append(providerName); sb->Append("</ProviderName>"); sb->Append("<ProviderType>"); sb->Append(providerType); sb->Append("</ProviderType>"); sb->Append("</CustomCryptoKeyValue>"); return(sb->ToString()); } // Return the name for the key exchange algorithm. public: property String^ KeyExchangeAlgorithm { virtual String^ get() override { return "RSA-PKCS1-KeyEx"; } } // Retrieves the name of the signature alogrithm. public: property String^ SignatureAlgorithm { virtual String^ get() override { return "http://www.w3.org/2000/09/xmldsig#rsa-sha1"; } } // Required member for implementing the AsymmetricAlgorithm class. protected: virtual ~CustomCrypto() { } // Call the Create method using the CustomCrypto assembly name. // The create function attempts to create a CustomCrypto // object using the assembly name. This functionality requires // modification of the machine.config file. Add the following // section to the configuration element and modify the values // of the cryptoClass to reflect what isinstalled // in your machines GAC. //<mscorlib> // <cryptographySettings> // <cryptoNameMapping> // <cryptoClasses> // <cryptoClass CustomCrypto="Contoso.CustomCrypto , // CustomCrypto, // Culture=neutral, // PublicKeyToken=fdb9f9c4851028bf, // Version=1.0.1448.27640" /> // </cryptoClasses> // <nameEntry name="Contoso.CustomCrypto" // class="CustomCrypto" /> // <nameEntry name="CustomCrypto" class="CustomCrypto" /> // </cryptoNameMapping> // </cryptographySettings> //</mscorlib> public: static CustomCrypto^ Create() { return Create("CustomCrypto"); } // Create a CustomCrypto object by calling CrytoConfig's // CreateFromName method and casting the type to CustomCrypto. // The create function attempts to create a CustomCrypto object // using the assembly name. This functionality requires // modification of the machine.config file. Add the following // section to the configuration element and modify the values // of the cryptoClass to reflect what is installed // in your machines GAC. //<mscorlib> // <cryptographySettings> // <cryptoNameMapping> // <cryptoClasses> // <cryptoClass CustomCrypto="Contoso.CustomCrypto , // CustomCrypto, // Culture=neutral, // PublicKeyToken=fdb9f9c4851028bf, // Version=1.0.1448.27640" /> // </cryptoClasses> // <nameEntry name="Contoso.CustomCrypto" // class="CustomCrypto" /> // <nameEntry name="CustomCrypto" class="CustomCrypto" /> // </cryptoNameMapping> // </cryptographySettings> //</mscorlib> public: static CustomCrypto^ Create(String^ algorithmName) { return (CustomCrypto^) CryptoConfig::CreateFromName(algorithmName); } }; }
Class Form1 Inherits System.Windows.Forms.Form ' Event handler for Run button. Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click tbxOutput.Cursor = Cursors.WaitCursor tbxOutput.Text = "" ' Construct a CustomCrypto object and initialize its ' CspParameters. Dim customCrypto As New Contoso.vbCustomCrypto customCrypto.InitializeParameters() ' Display properties of the current vbCustomCrypto object. WriteLine("*** CustomCrypto created with default parameters:") DisplayProperties(customCrypto) ' Release all the resources used by this instance of CustomCrytpo. customCrypto.Clear() customCrypto = New Contoso.vbCustomCrypto(64) ' Create new parameters and set them by using the ' FromXmlString method. Dim parameterXml As String = "<CustomCryptoKeyValue>" parameterXml += "<ProviderName>Contoso</ProviderName>" parameterXml += "<KeyContainerName>SecurityBin2" parameterXml += "</KeyContainerName>" parameterXml += "<KeyNumber>1</KeyNumber>" parameterXml += "<ProviderType>2</ProviderType>" parameterXml += "</CustomCryptoKeyValue>" customCrypto.FromXmlString(parameterXml) ' Display the properties of a customCrypto object created with ' custom parameters. WriteLine(vbCrLf + "*** " + _ "CustomCrypto created with custom parameters:") DisplayProperties(customCrypto) ' Create an object by using the assembly name. Try Dim createdCrypto As Contoso.vbCustomCrypto createdCrypto = customCrypto.Create("vbCustomCrypto") If (Not createdCrypto Is Nothing) Then Write(vbCrLf + "*** Successfully created vbCustomCrytpo ") WriteLine("from the Create method.") DisplayProperties(createdCrypto) Else Write("Unable to create CustomCrytpo from ") WriteLine(" the Create method.") End If Catch ex As Exception WriteLine(ex.ToString()) End Try ' Align interface and conclude application. WriteLine("This sample completed successfully;" + _ " press Exit to continue.") ' Reset the cursor. tbxOutput.Cursor = Cursors.Default End Sub ' Display the properties of the specified CustomCrypto object to ' the output texbox. Public Sub DisplayProperties( _ ByVal customCrypto As Contoso.vbCustomCrypto) Try ' Retrieve the class description for the customCrypto object. Dim classDescription As String = customCrypto.ToString() WriteLine(classDescription) WriteLine("KeyExchangeAlgorithm: " + _ customCrypto.KeyExchangeAlgorithm) WriteLine("SignatureAlgorithm: " + _ customCrypto.SignatureAlgorithm) WriteLine("KeySize: " + customCrypto.KeySize.ToString()) WriteLine("Parameters described in Xml format:") WriteLine(customCrypto.ToXmlString(True)) ' Display the MinSize, MaxSize, and SkipSize properties of ' each KeySize item in the local keySizes member variable. Dim legalKeySizes() As KeySizes = customCrypto.LegalKeySizes If (legalKeySizes.Length > 0) Then For i As Integer = 0 To legalKeySizes.Length - 1 Step 1 Write("Keysize" + i.ToString() + " min, max, step: ") Write(legalKeySizes(i).MinSize.ToString() + ", ") Write(legalKeySizes(i).MaxSize.ToString() + ", ") Write(legalKeySizes(i).SkipSize.ToString() + ", ") WriteLine("") Next End If Catch ex As Exception WriteLine("Caught unexpected exception: " + ex.ToString()) End Try End Sub ' Write the specified message and carriage return to the output ' textbox. Private Sub WriteLine(ByVal message As String) tbxOutput.AppendText(message + vbCrLf) End Sub ' Write the specified message to the output textbox. Private Sub Write(ByVal message As String) tbxOutput.AppendText(message) End Sub ' Event handler for Exit button. Private Sub Button2_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form 'Designer. It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. Friend WithEvents Panel2 As System.Windows.Forms.Panel Friend WithEvents Panel1 As System.Windows.Forms.Panel Friend WithEvents Button1 As System.Windows.Forms.Button Friend WithEvents Button2 As System.Windows.Forms.Button Friend WithEvents tbxOutput As System.Windows.Forms.RichTextBox <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.Panel2 = New System.Windows.Forms.Panel Me.Button1 = New System.Windows.Forms.Button Me.Button2 = New System.Windows.Forms.Button Me.Panel1 = New System.Windows.Forms.Panel Me.tbxOutput = New System.Windows.Forms.RichTextBox Me.Panel2.SuspendLayout() Me.Panel1.SuspendLayout() Me.SuspendLayout() ' 'Panel2 ' Me.Panel2.Controls.Add(Me.Button1) Me.Panel2.Controls.Add(Me.Button2) Me.Panel2.Dock = System.Windows.Forms.DockStyle.Bottom Me.Panel2.DockPadding.All = 20 Me.Panel2.Location = New System.Drawing.Point(0, 320) Me.Panel2.Name = "Panel2" Me.Panel2.Size = New System.Drawing.Size(616, 64) Me.Panel2.TabIndex = 1 ' 'Button1 ' Me.Button1.Dock = System.Windows.Forms.DockStyle.Right Me.Button1.Font = New System.Drawing.Font( _ "Microsoft Sans Serif", _ 9.0!, _ System.Drawing.FontStyle.Regular, _ System.Drawing.GraphicsUnit.Point, _ CType(0, Byte)) Me.Button1.Location = New System.Drawing.Point(446, 20) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(75, 24) Me.Button1.TabIndex = 2 Me.Button1.Text = "&Run" ' 'Button2 ' Me.Button2.Dock = System.Windows.Forms.DockStyle.Right Me.Button2.Font = New System.Drawing.Font( _ "Microsoft Sans Serif", _ 9.0!, _ System.Drawing.FontStyle.Regular, _ System.Drawing.GraphicsUnit.Point, _ CType(0, Byte)) Me.Button2.Location = New System.Drawing.Point(521, 20) Me.Button2.Name = "Button2" Me.Button2.Size = New System.Drawing.Size(75, 24) Me.Button2.TabIndex = 3 Me.Button2.Text = "E&xit" ' 'Panel1 ' Me.Panel1.Controls.Add(Me.tbxOutput) Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill Me.Panel1.DockPadding.All = 20 Me.Panel1.Location = New System.Drawing.Point(0, 0) Me.Panel1.Name = "Panel1" Me.Panel1.Size = New System.Drawing.Size(616, 320) Me.Panel1.TabIndex = 2 ' 'tbxOutput ' Me.tbxOutput.AccessibleDescription = _ "Displays output from application." Me.tbxOutput.AccessibleName = "Output textbox." Me.tbxOutput.Dock = System.Windows.Forms.DockStyle.Fill Me.tbxOutput.Location = New System.Drawing.Point(20, 20) Me.tbxOutput.Name = "tbxOutput" Me.tbxOutput.Size = New System.Drawing.Size(576, 280) Me.tbxOutput.TabIndex = 1 Me.tbxOutput.Text = "Click the Run button to run the application." ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) Me.ClientSize = New System.Drawing.Size(616, 384) Me.Controls.Add(Me.Panel1) Me.Controls.Add(Me.Panel2) Me.Name = "Form1" Me.Text = "AsymmetricAlgorithm" Me.Panel2.ResumeLayout(False) Me.Panel1.ResumeLayout(False) Me.ResumeLayout(False) End Sub End Class End Namespace ' ' This sample produces the following output: ' ' *** CustomCrypto created with default parameters: ' Contoso.vbCustomCrypto ' KeyExchangeAlgorithm: RSA-PKCS1-KeyEx ' SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 ' KeySize: 8 ' Parameters described in Xml format: ' <CustomCryptoKeyValue><KeyContainerName>SecurityBin1</KeyContainerName> ' <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> ' <ProviderType>2</ProviderType></CustomCryptoKeyValue> ' Keysize0 min, max, step: 8, 64, 8, ' ' *** CustomCrypto created with custom parameters: ' Contoso.vbCustomCrypto ' KeyExchangeAlgorithm: RSA-PKCS1-KeyEx ' SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 ' KeySize: 64 ' Parameters described in Xml format: ' <CustomCryptoKeyValue><KeyContainerName>SecurityBin2</KeyContainerName> ' <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> ' <ProviderType>2</ProviderType></CustomCryptoKeyValue> ' Keysize0 min, max, step: 8, 64, 8, ' Unable to create CustomCrytpo from the Create method ' This sample completed successfully; press Enter to exit.
class CustomCryptoImpl { [STAThread] static void Main(string[] args) { // Construct a CustomCrypto object and initialize its // CspParameters. CustomCrypto customCrypto = new CustomCrypto(); customCrypto.InitializeParameters(); // Display properties of the current customCrypto object. Console.WriteLine("*** CustomCrypto created with default " + "parameters:"); DisplayProperties(customCrypto); // Release all the resources used by this instance of // CustomCrytpo. customCrypto.Clear(); customCrypto = new CustomCrypto(64); // Create new parameters and set them by using the FromXmlString // method. string parameterXml = "<CustomCryptoKeyValue>"; parameterXml += "<ProviderName>Contoso</ProviderName>"; parameterXml += "<KeyContainerName>SecurityBin2"; parameterXml += "</KeyContainerName>"; parameterXml += "<KeyNumber>1</KeyNumber>"; parameterXml += "<ProviderType>2</ProviderType>"; parameterXml += "</CustomCryptoKeyValue>"; customCrypto.FromXmlString(parameterXml); // Display the properties of a customCrypto object created with // custom parameters. Console.WriteLine("\n*** " + "CustomCrypto created with custom parameters:"); DisplayProperties(customCrypto); // Create an object by using the assembly name. try { CustomCrypto myCryptoA = CustomCrypto.Create("CustomCrypto"); if (myCryptoA != null) { Console.Write("\n*** " + "Successfully created CustomCrytpo from"); Console.WriteLine(" the Create method."); DisplayProperties(myCryptoA); } else { Console.Write("Unable to create CustomCrytpo from "); Console.WriteLine(" the Create method."); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.WriteLine("This sample completed successfully; " + "press Enter to exit."); Console.ReadLine(); } // Display the properties of the specified CustomCrypto object to the // console. public static void DisplayProperties(CustomCrypto customCrypto) { try { // Retrieve the class description for the customCrypto object. string classDescription = customCrypto.ToString(); Console.WriteLine(classDescription); Console.Write("KeyExchangeAlgorithm: "); Console.WriteLine(customCrypto.KeyExchangeAlgorithm); Console.Write("SignatureAlgorithm: "); Console.WriteLine(customCrypto.SignatureAlgorithm); Console.WriteLine("KeySize: " + customCrypto.KeySize); Console.WriteLine("Parameters described in Xml format:"); Console.WriteLine(customCrypto.ToXmlString(true)); // Display the MinSize, MaxSize, and SkipSize properties of // each KeySize item in the local keySizes member variable. KeySizes[] legalKeySizes = customCrypto.LegalKeySizes; if (legalKeySizes.Length > 0) { for (int i=0; i < legalKeySizes.Length; i++) { Console.Write("Keysize" + i + " min, max, step: "); Console.Write(legalKeySizes[i].MinSize + ", "); Console.Write(legalKeySizes[i].MaxSize + ", "); Console.WriteLine(legalKeySizes[i].SkipSize + ", "); } } } catch (Exception ex) { Console.WriteLine("Caught unexpected exception: " + ex.ToString()); } } } } // // This sample produces the following output: // // *** CustomCrypto created with default parameters: // Contoso.vbCustomCrypto // KeyExchangeAlgorithm: RSA-PKCS1-KeyEx // SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 // KeySize: 8 // Parameters described in Xml format: // <CustomCryptoKeyValue><KeyContainerName>SecurityBin1</KeyContainerName> // <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> // <ProviderType>2</ProviderType></CustomCryptoKeyValue> // Keysize0 min, max, step: 8, 64, 8, // // *** CustomCrypto created with custom parameters: // Contoso.vbCustomCrypto // KeyExchangeAlgorithm: RSA-PKCS1-KeyEx // SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 // KeySize: 64 // Parameters described in Xml format: // <CustomCryptoKeyValue><KeyContainerName>SecurityBin2</KeyContainerName> // <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> // <ProviderType>2</ProviderType></CustomCryptoKeyValue> // Keysize0 min, max, step: 8, 64, 8, // Unable to create CustomCrytpo from the Create method // This sample completed successfully; press Exit to continue.
#using <System.Xml.dll> #using <System.Security.dll> using namespace System; using namespace System::Xml; using namespace System::Text; using namespace System::Security::Cryptography; // Display the properties of the specified CustomCrypto object to the // console. static void DisplayProperties(Contoso::CustomCrypto^ customCryptoAlgorithm) { // Retrieve the class description for the customCrypto object. String^ classDescription = customCryptoAlgorithm->ToString(); Console::WriteLine(classDescription); Console::WriteLine("KeyExchangeAlgorithm: {0}", customCryptoAlgorithm->KeyExchangeAlgorithm); Console::WriteLine("SignatureAlgorithm: {0}", customCryptoAlgorithm->SignatureAlgorithm); Console::WriteLine("KeySize: {0}", customCryptoAlgorithm->KeySize); Console::WriteLine("Parameters described in Xml format:"); Console::WriteLine(customCryptoAlgorithm->ToXmlString(true)); // Display the MinSize, MaxSize, and SkipSize properties of // each KeySize item in the local keySizes member variable. array<KeySizes^>^ legalKeySizes = customCryptoAlgorithm->LegalKeySizes; for (int i = 0; i < legalKeySizes->Length; i++) { Console::WriteLine( "Keysize{0} min, max, step: {1}, {2}, {3}, ", i, legalKeySizes[i]->MinSize, legalKeySizes[i]->MaxSize, legalKeySizes[i]->SkipSize); } } [STAThread] int main() { // Construct a CustomCrypto object and initialize its // CspParameters. Contoso::CustomCrypto^ customCryptoAlgorithm = gcnew Contoso::CustomCrypto(); customCryptoAlgorithm->InitializeParameters(); // Display properties of the current customCrypto object. Console::WriteLine( "*** CustomCrypto created with default parameters:"); DisplayProperties(customCryptoAlgorithm); // Release all the resources used by this instance of // CustomCrypto. customCryptoAlgorithm->Clear(); customCryptoAlgorithm = gcnew Contoso::CustomCrypto(64); // Create new parameters and set them by using the FromXmlString // method. String^ parameterXml = "<CustomCryptoKeyValue>" + "<ProviderName>Contoso</ProviderName>" + "<KeyContainerName>SecurityBin2</KeyContainerName>" + "<KeyNumber>1</KeyNumber>" + "<ProviderType>2</ProviderType>" + "</CustomCryptoKeyValue>"; customCryptoAlgorithm->FromXmlString(parameterXml); // Display the properties of a customCrypto object created with // custom parameters. Console::WriteLine( "{0}*** CustomCrypto created with custom parameters:", Environment::NewLine); DisplayProperties(customCryptoAlgorithm); // Create an object by using the assembly name. Contoso::CustomCrypto^ cryptoFromAssembly = Contoso::CustomCrypto::Create("CustomCrypto"); if (cryptoFromAssembly != nullptr) { Console::WriteLine("{0}*** Successfully created " + "CustomCrypto from the Create method.", Environment::NewLine); DisplayProperties(cryptoFromAssembly); } else { Console::WriteLine("Unable to create CustomCrypto from " + "the Create method."); } Console::WriteLine( "This sample completed successfully; press Enter to exit."); Console::ReadLine(); } // // This sample produces the following output: // // *** CustomCrypto created with default parameters: // Contoso.vbCustomCrypto // KeyExchangeAlgorithm: RSA-PKCS1-KeyEx // SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 // KeySize: 8 // Parameters described in Xml format: // <CustomCryptoKeyValue><KeyContainerName>SecurityBin1</KeyContainerName> // <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> // <ProviderType>2</ProviderType></CustomCryptoKeyValue> // Keysize0 min, max, step: 8, 64, 8, // // *** CustomCrypto created with custom parameters: // Contoso.vbCustomCrypto // KeyExchangeAlgorithm: RSA-PKCS1-KeyEx // SignatureAlgorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1 // KeySize: 64 // Parameters described in Xml format: // <CustomCryptoKeyValue><KeyContainerName>SecurityBin2</KeyContainerName> // <KeyNumber>1</KeyNumber><ProviderName>Contoso</ProviderName> // <ProviderType>2</ProviderType></CustomCryptoKeyValue> // Keysize0 min, max, step: 8, 64, 8, // Unable to create CustomCrypto from the Create method // This sample completed successfully; press Enter to exit.

System.Security.Cryptography.AsymmetricAlgorithm
System.Security.Cryptography.DSA
System.Security.Cryptography.RSA


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


AsymmetricAlgorithm コンストラクタ
アセンブリ: mscorlib (mscorlib.dll 内)



抽象クラスのインスタンスは作成できません。アプリケーション コードは、派生クラスの新しいインスタンスを作成します。現在サポートされている実装は、RSACryptoServiceProvider クラスおよび DSACryptoServiceProvider クラスだけです。

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


AsymmetricAlgorithm フィールド

名前 | 説明 | |
---|---|---|
![]() | KeySizeValue | 非対称アルゴリズムで使用されるキー モジュラスのサイズをビット単位で表します。 |
![]() | LegalKeySizesValue | 非対称アルゴリズムでサポートされているキー サイズを指定します。 |

AsymmetricAlgorithm プロパティ
AsymmetricAlgorithm メソッド

名前 | 説明 | |
---|---|---|
![]() | Clear | AsymmetricAlgorithm クラスによって使用されているすべてのリソースを解放します。 |
![]() | Create | オーバーロードされます。 非対称アルゴリズムを実行するために使用する暗号オブジェクトを作成します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | FromXmlString | 派生クラスでオーバーライドされると、XML 文字列から AsymmetricAlgorithm オブジェクトを再構築します。 |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |
![]() | ToXmlString | 派生クラスでオーバーライドされると、現在の AsymmetricAlgorithm オブジェクトの XML 文字列形式を作成して返します。 |

名前 | 説明 | |
---|---|---|
![]() | Dispose | 派生クラスでオーバーライドされると、AsymmetricAlgorithm によって使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |


AsymmetricAlgorithm メンバ
非対称アルゴリズムのすべての実装が継承する必要がある、抽象基本クラスを表します。
AsymmetricAlgorithm データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | KeySizeValue | 非対称アルゴリズムで使用されるキー モジュラスのサイズをビット単位で表します。 |
![]() | LegalKeySizesValue | 非対称アルゴリズムでサポートされているキー サイズを指定します。 |


名前 | 説明 | |
---|---|---|
![]() | Clear | AsymmetricAlgorithm クラスによって使用されているすべてのリソースを解放します。 |
![]() | Create | オーバーロードされます。 非対称アルゴリズムを実行するために使用する暗号オブジェクトを作成します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | FromXmlString | 派生クラスでオーバーライドされると、XML 文字列から AsymmetricAlgorithm オブジェクトを再構築します。 |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |
![]() | ToXmlString | 派生クラスでオーバーライドされると、現在の AsymmetricAlgorithm オブジェクトの XML 文字列形式を作成して返します。 |

名前 | 説明 | |
---|---|---|
![]() | Dispose | 派生クラスでオーバーライドされると、AsymmetricAlgorithm によって使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。 |
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |


Weblioに収録されているすべての辞書からAsymmetricAlgorithmを検索する場合は、下記のリンクをクリックしてください。

- AsymmetricAlgorithmのページへのリンク