Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

X509Certificate2-Klasse

 

Veröffentlicht: Oktober 2016

Stellt ein X.509-Zertifikat dar.

Namespace:   System.Security.Cryptography.X509Certificates
Assembly:  System (in System.dll)

System.Object
  System.Security.Cryptography.X509Certificates.X509Certificate
    System.Security.Cryptography.X509Certificates.X509Certificate2

[SerializableAttribute]
public class X509Certificate2 : X509Certificate

NameBeschreibung
System_CAPS_pubmethodX509Certificate2()

Initialisiert eine neue Instanz der X509Certificate2-Klasse.

System_CAPS_pubmethodX509Certificate2(Byte[])

Initialisiert eine neue Instanz der X509Certificate2 -Klasse unter Verwendung der Informationen aus einem Bytearray.

System_CAPS_pubmethodX509Certificate2(Byte[], SecureString)

Initialisiert eine neue Instanz der X509Certificate2-Klasse mit einem Bytearray und einem Kennwort.

System_CAPS_pubmethodX509Certificate2(Byte[], SecureString, X509KeyStorageFlags)

Initialisiert eine neue Instanz der X509Certificate2-Klasse mit einem Bytearray, einem Kennwort und einem Schlüsselspeicherflag.

System_CAPS_pubmethodX509Certificate2(Byte[], String)

Initialisiert eine neue Instanz der X509Certificate2-Klasse mit einem Bytearray und einem Kennwort.

System_CAPS_pubmethodX509Certificate2(Byte[], String, X509KeyStorageFlags)

Initialisiert eine neue Instanz der X509Certificate2-Klasse mit einem Bytearray, einem Kennwort und einem Schlüsselspeicherflag.

System_CAPS_pubmethodX509Certificate2(IntPtr)

Initialisiert eine neue Instanz der X509Certificate2 -Klasse unter Verwendung eines nicht verwalteten Handles.

System_CAPS_protmethodX509Certificate2(SerializationInfo, StreamingContext)

Initialisiert eine neue Instanz der X509Certificate2 -Klasse mit den angegebenen Serialisierungs- und Stream-Kontextinformationen.

System_CAPS_pubmethodX509Certificate2(String)

Initialisiert eine neue Instanz der X509Certificate2 -Klasse mithilfe eines Zertifikatsdateinamens.

System_CAPS_pubmethodX509Certificate2(String, SecureString)

Initialisiert mithilfe eines Zertifikatsdateinamens und eines Kennworts eine neue Instanz der X509Certificate2-Klasse.

System_CAPS_pubmethodX509Certificate2(String, SecureString, X509KeyStorageFlags)

Initialisiert mithilfe eines Zertifikatsdateinamens, eines Kennworts und eines Schlüsselspeicherflags eine neue Instanz der X509Certificate2-Klasse.

System_CAPS_pubmethodX509Certificate2(String, String)

Initialisiert eine neue Instanz der X509Certificate2 -Klasse mithilfe eines Zertifikatsdateinamens und eines Kennworts verwendet, um das Zertifikat zugreifen.

System_CAPS_pubmethodX509Certificate2(String, String, X509KeyStorageFlags)

Initialisiert eine neue Instanz der dem X509Certificate2 mithilfe eines Zertifikatsdateinamens Klassenname, ein Kennwort verwendet, um Zugriff auf das Zertifikat und einem Schlüsselspeicherflag.

System_CAPS_pubmethodX509Certificate2(X509Certificate)

Initialisiert eine neue Instanz von der X509Certificate2 -Klasse unter Verwendung einer X509Certificate Objekt.

NameBeschreibung
System_CAPS_pubpropertyArchived

Ruft ab oder legt einen Wert, der angibt, dass ein x. 509-Zertifikat archiviert wird.

System_CAPS_pubpropertyExtensions

Ruft eine Auflistung von X509Extension-Objekten ab.

System_CAPS_pubpropertyFriendlyName

Ruft ab oder legt den zugeordneten Alias für ein Zertifikat.

System_CAPS_pubpropertyHandle

Ruft ein Handle für einen von einer nicht verwalteten PCCERT_CONTEXT-Struktur beschriebenen Microsoft Cryptographic API-Zertifikatskontext ab.(Geerbt von „X509Certificate“.)

System_CAPS_pubpropertyHasPrivateKey

Ruft einen Wert, der angibt, ob ein X509Certificate2 -Objekt einen privaten Schlüssel enthält.

System_CAPS_pubpropertyIssuer

Ruft den Namen der Zertifizierungsstelle ab, die das X.509-Zertifikat (v.3) ausgestellt hat.(Geerbt von „X509Certificate“.)

System_CAPS_pubpropertyIssuerName

Ruft den distinguished Name des Zertifikatausstellers.

System_CAPS_pubpropertyNotAfter

Ruft das Datum in Ortszeit, die nach dem Zertifikat nicht mehr gültig ist.

System_CAPS_pubpropertyNotBefore

Ruft das Datum in der lokalen Zeit auf dem ein Zertifikat gültig ist.

System_CAPS_pubpropertyPrivateKey

Ruft ab oder legt die AsymmetricAlgorithm -Objekt, den mit einem Zertifikat zugeordneten privaten Schlüssel darstellt.

System_CAPS_pubpropertyPublicKey

Ruft ein PublicKey Objekt, das mit einem Zertifikat zugeordnet.

System_CAPS_pubpropertyRawData

Ruft die Rohdaten eines Zertifikats ab.

System_CAPS_pubpropertySerialNumber

Ruft die Seriennummer eines Zertifikats ab.

System_CAPS_pubpropertySignatureAlgorithm

Ruft den Algorithmus zum Erstellen der Signatur eines Zertifikats verwendet.

System_CAPS_pubpropertySubject

Ruft den Distinguished Name für den Antragsteller aus dem Zertifikat ab.(Geerbt von „X509Certificate“.)

System_CAPS_pubpropertySubjectName

Ruft den distinguished Antragstellername aus einem Zertifikat ab.

System_CAPS_pubpropertyThumbprint

Ruft den Fingerabdruck eines Zertifikats ab.

System_CAPS_pubpropertyVersion

Ruft die x. 509-Formatversion eines Zertifikats ab.

NameBeschreibung
System_CAPS_pubmethodDispose()

Gibt alle vom aktuellen X509Certificate-Objekt verwendeten Ressourcen frei.(Geerbt von „X509Certificate“.)

System_CAPS_protmethodDispose(Boolean)

Gibt alle von dieser X509Certificate verwendeten nicht verwalteten Ressourcen und optional auch die verwalteten Ressourcen frei.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodEquals(Object)

Überprüft zwei X509Certificate-Objekte auf Gleichheit.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodEquals(X509Certificate)

Überprüft zwei X509Certificate-Objekte auf Gleichheit.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodExport(X509ContentType)

Exportiert das aktuelle X509Certificate-Objekt in einem durch einen der X509ContentType-Werte beschriebenen Format in ein Bytearray.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodExport(X509ContentType, SecureString)

Exportiert das aktuelle X509Certificate-Objekt mit dem angegebenen Format und einem Kennwort in ein Bytearray.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodExport(X509ContentType, String)

Exportiert das aktuelle X509Certificate-Objekt in einem durch einen der X509ContentType-Werte beschriebenen Format mithilfe des angegebenen Kennworts in ein Bytearray.(Geerbt von „X509Certificate“.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird.(Geerbt von „Object“.)

System_CAPS_pubmethodSystem_CAPS_staticGetCertContentType(Byte[])

Gibt den Typ des Zertifikats in einen Byte-Array enthalten sind.

System_CAPS_pubmethodSystem_CAPS_staticGetCertContentType(String)

Gibt den Typ des Zertifikats in einer Datei enthalten.

System_CAPS_pubmethodGetCertHash()

Gibt den Hashwert für das X.509-Zertifikat (v.3) als Bytearray zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetCertHashString()

Gibt den SHA1-Hashwert für das X.509v3-Zertifikat als hexadezimale Zeichenfolge zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetEffectiveDateString()

Gibt das Gültigkeitsdatum dieses X.509-Zertifikats (v.3) zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetExpirationDateString()

Gibt das Ablaufdatum dieses X.509-Zertifikats (v.3) zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetFormat()

Gibt den Namen des Formats dieses X.509-Zertifikats (v.3) zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetHashCode()

Gibt den Hashcode für das X.509-Zertifikat (v.3) als ganze Zahl zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetIssuerName()

Veraltet. Gibt den Namen der Zertifizierungsstelle zurück, die das X.509-Zertifikat (v.3) ausgestellt hat.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetKeyAlgorithm()

Gibt die Schlüsselalgorithmusinformationen für dieses X.509v3-Zertifikat als Zeichenfolge zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetKeyAlgorithmParameters()

Gibt die Schlüsselalgorithmusparameter für das X.509v3-Zertifikat als Bytearray zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetKeyAlgorithmParametersString()

Gibt die Schlüsselalgorithmusparameter für das X.509v3-Zertifikat als hexadezimale Zeichenfolge zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetName()

Veraltet. Gibt den Namen des Prinzipals zurück, für den das Zertifikat ausgestellt wurde.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetNameInfo(X509NameType, Boolean)

Ruft den Betreff und Aussteller Namen aus einem Zertifikat.

System_CAPS_pubmethodGetPublicKey()

Gibt den öffentlichen Schlüssel für das X.509v3-Zertifikat als Bytearray zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetPublicKeyString()

Gibt den öffentlichen Schlüssel für das X.509v3-Zertifikat als hexadezimale Zeichenfolge zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetRawCertData()

Gibt die Rohdaten für das gesamte X.509v3-Zertifikat als Bytearray zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetRawCertDataString()

Gibt die Rohdaten für das gesamte X.509v3-Zertifikat als hexadezimale Zeichenfolge zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetSerialNumber()

Gibt die Seriennummer des X.509v3-Zertifikats als Bytearray zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetSerialNumberString()

Gibt die Seriennummer des X.509v3-Zertifikats als hexadezimale Zeichenfolge zurück.(Geerbt von „X509Certificate“.)

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethodImport(Byte[])

Füllt ein X509Certificate2 Objekt mit Daten aus einem Bytearray.(Überschreibt X509Certificate.Import(Byte[]).)

System_CAPS_pubmethodImport(Byte[], SecureString, X509KeyStorageFlags)

Füllt ein X509Certificate2-Objekt mithilfe der Daten aus einem Bytearray, eines Kennworts und eines Schlüsselspeicherflags auf.(Überschreibt X509Certificate.Import(Byte[], SecureString, X509KeyStorageFlags).)

System_CAPS_pubmethodImport(Byte[], String, X509KeyStorageFlags)

Füllt ein X509Certificate2 -Objekt mithilfe der Daten aus einem Bytearray, ein Kennwort und Flags für die Bestimmung des privaten Schlüssels zu importieren.(Überschreibt X509Certificate.Import(Byte[], String, X509KeyStorageFlags).)

System_CAPS_pubmethodImport(String)

Füllt ein X509Certificate2 -Objekt mit Informationen aus einer Zertifikatsdatei.(Überschreibt X509Certificate.Import(String).)

System_CAPS_pubmethodImport(String, SecureString, X509KeyStorageFlags)

Füllt ein X509Certificate2-Objekt mit Informationen aus einer Zertifikatsdatei, einem Kennwort und einem Schlüsselspeicherflag auf.(Überschreibt X509Certificate.Import(String, SecureString, X509KeyStorageFlags).)

System_CAPS_pubmethodImport(String, String, X509KeyStorageFlags)

Füllt ein X509Certificate2 -Objekt mit Informationen aus einer Zertifikatsdatei, einem Kennwort und einem X509KeyStorageFlags Wert.(Überschreibt X509Certificate.Import(String, String, X509KeyStorageFlags).)

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von „Object“.)

System_CAPS_pubmethodReset()

Setzt den Status einer X509Certificate2 Objekt.(Überschreibt X509Certificate.Reset().)

System_CAPS_pubmethodToString()

Zeigt ein x. 509-Zertifikat im Textformat.(Überschreibt X509Certificate.ToString().)

System_CAPS_pubmethodToString(Boolean)

Zeigt ein x. 509-Zertifikat im Textformat.(Überschreibt X509Certificate.ToString(Boolean).)

System_CAPS_pubmethodVerify()

Überprüft ein x. 509-Kette grundlegende Richtlinie verwenden.

NameBeschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethodIDeserializationCallback.OnDeserialization(Object)

Implementiert die ISerializable-Schnittstelle und wird nach Abschluss der Deserialisierung durch das Deserialisierungsereignis aufgerufen.(Geerbt von „X509Certificate“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethodISerializable.GetObjectData(SerializationInfo, StreamingContext)

Ruft Serialisierungsinformationen mit allen Daten ab, die für das erneute Erstellen einer Instanz des aktuellen X509Certificate-Objekts erforderlich sind.(Geerbt von „X509Certificate“.)

NameBeschreibung
System_CAPS_pubmethodGetDSAPrivateKey()

Ruft den privaten DSA-Schlüssel aus dem X509Certificate2 ab.(Definiert durch DSACertificateExtensions.)

System_CAPS_pubmethodGetDSAPublicKey()

Ruft den öffentlichen DSA-Schlüssel aus dem X509Certificate2 ab.(Definiert durch DSACertificateExtensions.)

System_CAPS_pubmethodGetECDsaPrivateKey()

Ruft den privaten Schlüssel ECDsa aus dem Zertifikat X509Certificate2 ab.(Definiert durch ECDsaCertificateExtensions.)

System_CAPS_pubmethodGetECDsaPublicKey()

Ruft den öffentlichen Schlüssel ECDsa aus dem Zertifikat X509Certificate2 ab.(Definiert durch ECDsaCertificateExtensions.)

System_CAPS_pubmethodGetRSAPrivateKey()

Ruft den privaten RSA-Schlüssel aus dem X509Certificate2 ab.(Definiert durch RSACertificateExtensions.)

System_CAPS_pubmethodGetRSAPublicKey()

Ruft den öffentlichen RSA-Schlüssel aus dem X509Certificate2 ab.(Definiert durch RSACertificateExtensions.)

The X.509 structure originated in the International Organization for Standardization (ISO) working groups. This structure can be used to represent various types of information including identity, entitlement, and holder attributes (permissions, age, sex, location, affiliation, and so forth). Although the ISO specifications are most informative on the structure itself, the T:System.Security.Cryptography.X509Certificates.X509Certificate2 class is designed to model the usage scenarios defined in specifications issued by the Internet Engineering Task Force (IETF) Public Key Infrastructure, X.509 (PKIX) working group. The most informative of these specifications is RFC 3280, "Certificate and Certificate Revocation List (CRL) Profilehttp://go.microsoft.com/fwlink/?LinkId=45286."

System_CAPS_importantWichtig

Starting with the net_v46, this type implements the T:System.IDisposable interface. When you have finished using the type, you should dispose of it either directly or indirectly. To dispose of the type directly, call its M:System.IDisposable.Dispose method in a try/catch block. To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). For more information, see the “Using an Object that Implements IDisposable” section in the T:System.IDisposable interface topic.

For apps that target the net_v452 and earlier versions, the T:System.Security.Cryptography.X509Certificates.X509Certificate2 class does not implement the T:System.IDisposable interface and therefore does not have a Dispose method.

The following example demonstrates how to use an T:System.Security.Cryptography.X509Certificates.X509Certificate2 object to encrypt and decrypt a file.

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.IO;
using System.Text;

// To run this sample use the Certificate Creation Tool (Makecert.exe) to generate a test X.509 certificate and 
// place it in the local user store. 
// To generate an exchange key and make the key exportable run the following command from a Visual Studio command prompt: 

//makecert -r -pe -n "CN=CERT_SIGN_TEST_CERT" -b 01/01/2010 -e 01/01/2012 -sky exchange -ss my
namespace X509CertEncrypt
{
    class Program
    {

        // Path variables for source, encryption, and
        // decryption folders. Must end with a backslash.
        private static string encrFolder = @"C:\Encrypt\";
        private static string decrFolder = @"C:\Decrypt\";
        private static string originalFile = "TestData.txt";
        private static string encryptedFile = "TestData.enc";

        static void Main(string[] args)
        {

            // Create an input file with test data.
            StreamWriter sw = File.CreateText(originalFile);
            sw.WriteLine("Test data to be encrypted");
            sw.Close();

            // Get the certifcate to use to encrypt the key.
            X509Certificate2 cert = GetCertificateFromStore("CN=CERT_SIGN_TEST_CERT");
            if (cert == null)
            {
                Console.WriteLine("Certificatge 'CN=CERT_SIGN_TEST_CERT' not found.");
                Console.ReadLine();
            }


            // Encrypt the file using the public key from the certificate.
            EncryptFile(originalFile, (RSACryptoServiceProvider)cert.PublicKey.Key);

            // Decrypt the file using the private key from the certificate.
            DecryptFile(encryptedFile, (RSACryptoServiceProvider)cert.PrivateKey);

            //Display the original data and the decrypted data.
            Console.WriteLine("Original:   {0}", File.ReadAllText(originalFile));
            Console.WriteLine("Round Trip: {0}", File.ReadAllText(decrFolder + originalFile));
            Console.WriteLine("Press the Enter key to exit.");
            Console.ReadLine();
        }
        private static X509Certificate2 GetCertificateFromStore(string certName)
        {

            // Get the certificate store for the current user.
            X509Store store = new X509Store(StoreLocation.CurrentUser);
            try
            {
                store.Open(OpenFlags.ReadOnly);

                // Place all certificates in an X509Certificate2Collection object.
                X509Certificate2Collection certCollection = store.Certificates;
                // If using a certificate with a trusted root you do not need to FindByTimeValid, instead:
                // currentCerts.Find(X509FindType.FindBySubjectDistinguishedName, certName, true);
                X509Certificate2Collection currentCerts = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
                X509Certificate2Collection signingCert = currentCerts.Find(X509FindType.FindBySubjectDistinguishedName, certName, false);
                if (signingCert.Count == 0)
                    return null;
                // Return the first certificate in the collection, has the right name and is current.
                return signingCert[0];
            }
            finally
            {
                store.Close();
            }

        }

        // Encrypt a file using a public key.
        private static void EncryptFile(string inFile, RSACryptoServiceProvider rsaPublicKey)
        {
            using (AesManaged aesManaged = new AesManaged())
            {
                // Create instance of AesManaged for
                // symetric encryption of the data.
                aesManaged.KeySize = 256;
                aesManaged.BlockSize = 128;
                aesManaged.Mode = CipherMode.CBC;
                using (ICryptoTransform transform = aesManaged.CreateEncryptor())
                {
                    RSAPKCS1KeyExchangeFormatter keyFormatter = new RSAPKCS1KeyExchangeFormatter(rsaPublicKey);
                    byte[] keyEncrypted = keyFormatter.CreateKeyExchange(aesManaged.Key, aesManaged.GetType());

                    // Create byte arrays to contain
                    // the length values of the key and IV.
                    byte[] LenK = new byte[4];
                    byte[] LenIV = new byte[4];

                    int lKey = keyEncrypted.Length;
                    LenK = BitConverter.GetBytes(lKey);
                    int lIV = aesManaged.IV.Length;
                    LenIV = BitConverter.GetBytes(lIV);

                    // Write the following to the FileStream
                    // for the encrypted file (outFs):
                    // - length of the key
                    // - length of the IV
                    // - ecrypted key
                    // - the IV
                    // - the encrypted cipher content

                    int startFileName = inFile.LastIndexOf("\\") + 1;
                    // Change the file's extension to ".enc"
                    string outFile = encrFolder + inFile.Substring(startFileName, inFile.LastIndexOf(".") - startFileName) + ".enc";
                    Directory.CreateDirectory(encrFolder);

                    using (FileStream outFs = new FileStream(outFile, FileMode.Create))
                    {

                        outFs.Write(LenK, 0, 4);
                        outFs.Write(LenIV, 0, 4);
                        outFs.Write(keyEncrypted, 0, lKey);
                        outFs.Write(aesManaged.IV, 0, lIV);

                        // Now write the cipher text using
                        // a CryptoStream for encrypting.
                        using (CryptoStream outStreamEncrypted = new CryptoStream(outFs, transform, CryptoStreamMode.Write))
                        {

                            // By encrypting a chunk at
                            // a time, you can save memory
                            // and accommodate large files.
                            int count = 0;
                            int offset = 0;

                            // blockSizeBytes can be any arbitrary size.
                            int blockSizeBytes = aesManaged.BlockSize / 8;
                            byte[] data = new byte[blockSizeBytes];
                            int bytesRead = 0;

                            using (FileStream inFs = new FileStream(inFile, FileMode.Open))
                            {
                                do
                                {
                                    count = inFs.Read(data, 0, blockSizeBytes);
                                    offset += count;
                                    outStreamEncrypted.Write(data, 0, count);
                                    bytesRead += blockSizeBytes;
                                }
                                while (count > 0);
                                inFs.Close();
                            }
                            outStreamEncrypted.FlushFinalBlock();
                            outStreamEncrypted.Close();
                        }
                        outFs.Close();
                    }
                }
            }
        }


        // Decrypt a file using a private key.
        private static void DecryptFile(string inFile, RSACryptoServiceProvider rsaPrivateKey)
        {

            // Create instance of AesManaged for
            // symetric decryption of the data.
            using (AesManaged aesManaged = new AesManaged())
            {
                aesManaged.KeySize = 256;
                aesManaged.BlockSize = 128;
                aesManaged.Mode = CipherMode.CBC;

                // Create byte arrays to get the length of
                // the encrypted key and IV.
                // These values were stored as 4 bytes each
                // at the beginning of the encrypted package.
                byte[] LenK = new byte[4];
                byte[] LenIV = new byte[4];

                // Consruct the file name for the decrypted file.
                string outFile = decrFolder + inFile.Substring(0, inFile.LastIndexOf(".")) + ".txt";

                // Use FileStream objects to read the encrypted
                // file (inFs) and save the decrypted file (outFs).
                using (FileStream inFs = new FileStream(encrFolder + inFile, FileMode.Open))
                {

                    inFs.Seek(0, SeekOrigin.Begin);
                    inFs.Seek(0, SeekOrigin.Begin);
                    inFs.Read(LenK, 0, 3);
                    inFs.Seek(4, SeekOrigin.Begin);
                    inFs.Read(LenIV, 0, 3);

                    // Convert the lengths to integer values.
                    int lenK = BitConverter.ToInt32(LenK, 0);
                    int lenIV = BitConverter.ToInt32(LenIV, 0);

                    // Determine the start postition of
                    // the ciphter text (startC)
                    // and its length(lenC).
                    int startC = lenK + lenIV + 8;
                    int lenC = (int)inFs.Length - startC;

                    // Create the byte arrays for
                    // the encrypted AesManaged key,
                    // the IV, and the cipher text.
                    byte[] KeyEncrypted = new byte[lenK];
                    byte[] IV = new byte[lenIV];

                    // Extract the key and IV
                    // starting from index 8
                    // after the length values.
                    inFs.Seek(8, SeekOrigin.Begin);
                    inFs.Read(KeyEncrypted, 0, lenK);
                    inFs.Seek(8 + lenK, SeekOrigin.Begin);
                    inFs.Read(IV, 0, lenIV);
                    Directory.CreateDirectory(decrFolder);
                    // Use RSACryptoServiceProvider
                    // to decrypt the AesManaged key.
                    byte[] KeyDecrypted = rsaPrivateKey.Decrypt(KeyEncrypted, false);

                    // Decrypt the key.
                    using (ICryptoTransform transform = aesManaged.CreateDecryptor(KeyDecrypted, IV))
                    {

                        // Decrypt the cipher text from
                        // from the FileSteam of the encrypted
                        // file (inFs) into the FileStream
                        // for the decrypted file (outFs).
                        using (FileStream outFs = new FileStream(outFile, FileMode.Create))
                        {

                            int count = 0;
                            int offset = 0;

                            int blockSizeBytes = aesManaged.BlockSize / 8;
                            byte[] data = new byte[blockSizeBytes];

                            // By decrypting a chunk a time,
                            // you can save memory and
                            // accommodate large files.

                            // Start at the beginning
                            // of the cipher text.
                            inFs.Seek(startC, SeekOrigin.Begin);
                            using (CryptoStream outStreamDecrypted = new CryptoStream(outFs, transform, CryptoStreamMode.Write))
                            {
                                do
                                {
                                    count = inFs.Read(data, 0, blockSizeBytes);
                                    offset += count;
                                    outStreamDecrypted.Write(data, 0, count);

                                }
                                while (count > 0);

                                outStreamDecrypted.FlushFinalBlock();
                                outStreamDecrypted.Close();
                            }
                            outFs.Close();
                        }
                        inFs.Close();
                    }

                }

            }
        }

    }
}

The following example creates a command-line executable that takes a certificate file as an argument and prints various certificate properties to the console.

using System;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.IO;
using System.Security.Cryptography.X509Certificates;


class CertInfo
{
	//Reads a file.
	internal static byte[] ReadFile (string fileName)
	{
		FileStream f = new FileStream(fileName, FileMode.Open, FileAccess.Read);
		int size = (int)f.Length;
		byte[] data = new byte[size];
		size = f.Read(data, 0, size);
		f.Close();
		return data;
	}
	//Main method begins here.
	static void Main(string[] args)
	{
		//Test for correct number of arguments.
		if (args.Length < 1)
		{
			Console.WriteLine("Usage: CertInfo <filename>");
			return;
		}
		try
		{
			X509Certificate2 x509 = new X509Certificate2();
			//Create X509Certificate2 object from .cer file.
			byte[] rawData = ReadFile(args[0]);

			x509.Import(rawData);

			//Print to console information contained in the certificate.
			Console.WriteLine("{0}Subject: {1}{0}", Environment.NewLine,x509.Subject);
			Console.WriteLine("{0}Issuer: {1}{0}", Environment.NewLine,x509.Issuer);
			Console.WriteLine("{0}Version: {1}{0}", Environment.NewLine,x509.Version);
			Console.WriteLine("{0}Valid Date: {1}{0}", Environment.NewLine,x509.NotBefore);
			Console.WriteLine("{0}Expiry Date: {1}{0}", Environment.NewLine,x509.NotAfter);
			Console.WriteLine("{0}Thumbprint: {1}{0}", Environment.NewLine,x509.Thumbprint);
			Console.WriteLine("{0}Serial Number: {1}{0}", Environment.NewLine,x509.SerialNumber);
			Console.WriteLine("{0}Friendly Name: {1}{0}", 								Environment.NewLine,x509.PublicKey.Oid.FriendlyName);
			Console.WriteLine("{0}Public Key Format: {1}{0}", 											Environment.NewLine,x509.PublicKey.EncodedKeyValue.Format(true));
			Console.WriteLine("{0}Raw Data Length: {1}{0}", Environment.NewLine,x509.RawData.Length);
			Console.WriteLine("{0}Certificate to string: {1}{0}", Environment.NewLine,x509.ToString(true));

			Console.WriteLine("{0}Certificate to XML String: {1}{0}", 								Environment.NewLine,x509.PublicKey.Key.ToXmlString(false));

			//Add the certificate to a X509Store.
			X509Store store = new X509Store();
			store.Open(OpenFlags.MaxAllowed);
			store.Add(x509);
			store.Close();
		}

		catch (DirectoryNotFoundException)
			{
				   Console.WriteLine("Error: The directory specified could not be found.");
			}
		catch (IOException)
			{
				Console.WriteLine("Error: A file in the directory could not be accessed.");
			}
		catch (NullReferenceException)
			{
				Console.WriteLine("File must be a .cer file. Program does not have access to that type of file.");
			}
	}

}

.NET Framework
Verfügbar seit 2.0

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: