Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Rfc2898DeriveBytes-Klasse

Implementiert mithilfe eines auf HMACSHA1 basierenden Generators für Pseudozufallszahlen die kennwortbasierte Schlüsselableitungsfunktion PBKDF2.

System.Object
  System.Security.Cryptography.DeriveBytes
    System.Security.Cryptography.Rfc2898DeriveBytes

Namespace:  System.Security.Cryptography
Assembly:  mscorlib (in mscorlib.dll)
[ComVisibleAttribute(true)]
public class Rfc2898DeriveBytes : DeriveBytes

Der Rfc2898DeriveBytes-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche MethodeRfc2898DeriveBytes(String, Byte[])Initialisiert eine neue Instanz der Rfc2898DeriveBytes-Klasse mithilfe des Kennworts und des Salts zum Ableiten des Schlüssels.
Öffentliche MethodeRfc2898DeriveBytes(String, Int32)Initialisiert eine neue Instanz der Rfc2898DeriveBytes-Klasse mithilfe des Kennworts und der Saltgröße zum Ableiten des Schlüssels.
Öffentliche MethodeRfc2898DeriveBytes(Byte[], Byte[], Int32)Initialisiert eine neue Instanz der Rfc2898DeriveBytes-Klasse mithilfe des Kennworts, der Salt und der Anzahl an Iterationen zum Ableiten des Schlüssels.
Öffentliche MethodeRfc2898DeriveBytes(String, Byte[], Int32)Initialisiert eine neue Instanz der Rfc2898DeriveBytes-Klasse mithilfe des Kennworts, der Salt und der Anzahl an Iterationen zum Ableiten des Schlüssels.
Öffentliche MethodeRfc2898DeriveBytes(String, Int32, Int32)Initialisiert eine neue Instanz der Rfc2898DeriveBytes-Klasse mithilfe des Kennworts, einer Saltgröße und der Anzahl an Iterationen zum Ableiten des Schlüssels.
Zum Seitenanfang
  NameBeschreibung
Öffentliche EigenschaftIterationCountRuft die Anzahl der Iterationen für die Operation ab oder legt diese fest.
Öffentliche EigenschaftSaltRuft den Wert der Schlüsselsalt für die Operation ab oder legt diesen fest.
Zum Seitenanfang
  NameBeschreibung
Öffentliche MethodeDispose()Gibt beim Überschreiben in einer abgeleiteten Klasse alle Ressourcen frei, die von der aktuellen Instanz der DeriveBytes-Klasse verwendet werden. (Von DeriveBytes geerbt.)
Geschützte MethodeDispose(Boolean)Gibt die von der Rfc2898DeriveBytes-Klasse verwendeten nicht verwalteten Ressourcen und optional auch die verwalteten Ressourcen frei. (Überschreibt DeriveBytes.Dispose(Boolean).)
Öffentliche MethodeEquals(Object) Bestimmt, ob das übergegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Geschützte MethodeFinalize Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche MethodeGetBytesGibt den pseudozufälligen Schlüssel für dieses Objekt zurück. (Überschreibt DeriveBytes.GetBytes(Int32).)
Öffentliche MethodeGetHashCodeFungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche MethodeGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte MethodeMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche MethodeResetSetzt den Zustand der Operation zurück. (Überschreibt DeriveBytes.Reset().)
Öffentliche MethodeToStringGibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Zum Seitenanfang

Rfc2898DeriveBytes nimmt ein Kennwort, eine Salt und eine Iterationsanzahl an und generiert anschließend durch Aufrufen der GetBytes-Methode Schlüssel.

RFC 2898 enthält Methoden zum Erstellen eines Schlüssels und eines Initialisierungsvektors (IV) aus einem Kennwort und einer Salt. Sie können PBKDF2 verwenden, eine kennwortbasierte Funktion zum Ableiten von Schlüsseln, um Schlüssel mithilfe einer Pseudozufallsfunktion abzuleiten, die die Generierung von Schlüsseln von praktisch unbegrenzter Länge erlaubt. Die Rfc2898DeriveBytes-Klasse kann verwendet werden, um einen abgeleiteten Schlüssel aus einem Basisschlüssel und anderen Parametern zu erstellen. Bei einer Schlüsselableitungsfunktion auf Kennwortbasis ist der Basisschlüssel ein Kennwort, und die anderen Parameter stellen einen Saltwert und eine Iterationsanzahl dar.

Weitere Informationen zu PBKDF2 finden Sie in RFC 2898, "PKCS #5: Password-Based Cryptography Specification Version 2.0" auf der Website Request for Comments. Alle Details finden Sie in Abschnitt 5.2, "PBKDF2".

SicherheitshinweisSicherheitshinweis

Schreiben Sie unter keinen Umständen Kennwörter in den Quellcode. Hartcodierte Kennwörter können mit Ildasm.exe (MSIL Disassembler-Tool), mit einem Hexadezimal-Editor oder einfach durch Öffnen der Assembly in einem Text-Editor (z. B. Notepad) abgerufen werden.

Im folgenden Codebeispiel wird die Rfc2898DeriveBytes-Klasse zum Erstellen zweier identischer Schlüssel für die TripleDES-Klasse verwendet. Daraufhin werden einige Daten mithilfe der Schlüssel verschlüsselt und entschlüsselt.


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

public class rfc2898test
{
	// Generate a key k1 with password pwd1 and salt salt1.
	// Generate a key k2 with password pwd1 and salt salt1.
	// Encrypt data1 with key k1 using symmetric encryption, creating edata1.
	// Decrypt edata1 with key k2 using symmetric decryption, creating data2.
	// data2 should equal data1.

	private const string usageText = "Usage: RFC2898 <password>\nYou must specify the password for encryption.\n";
	public static void Main(string[] passwordargs)
	{
		//If no file name is specified, write usage text.
		if (passwordargs.Length == 0)
		{
			Console.WriteLine(usageText);
		}
		else
		{
			string pwd1 = passwordargs[0];
			
			byte[] salt1 = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xF1, 0xF0, 0xEE, 0x21, 0x22, 0x45};
			//data1 can be a string or contents of a file.
			string data1 = "Some test data";
			//The default iteration count is 1000 so the two methods use the same iteration count.
			int myIterations = 1000;
			try
			{
				Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(pwd1, salt1,myIterations);
				Rfc2898DeriveBytes k2 = new Rfc2898DeriveBytes(pwd1, salt1);
				// Encrypt the data.
				TripleDES encAlg = TripleDES.Create();
				encAlg.Key = k1.GetBytes(16);
				MemoryStream encryptionStream = new MemoryStream();
				CryptoStream encrypt = new CryptoStream(encryptionStream, encAlg.CreateEncryptor(),CryptoStreamMode.Write);
				byte[] utfD1 = new System.Text.UTF8Encoding(false).GetBytes(data1);

				encrypt.Write(utfD1, 0, utfD1.Length);
				encrypt.FlushFinalBlock();
				encrypt.Close();
				byte[] edata1 = encryptionStream.ToArray();
				k1.Reset();

				// Try to decrypt, thus showing it can be round-tripped.
				TripleDES decAlg = TripleDES.Create();
				decAlg.Key = k2.GetBytes(16);
				decAlg.IV = encAlg.IV;
				MemoryStream decryptionStreamBacking = new MemoryStream();
				CryptoStream decrypt = new CryptoStream(decryptionStreamBacking,decAlg.CreateDecryptor(), CryptoStreamMode.Write);
				decrypt.Write(edata1, 0, edata1.Length);
				decrypt.Flush();
				decrypt.Close();
				k2.Reset();
				string data2 = new UTF8Encoding(false).GetString(decryptionStreamBacking.ToArray());

				if (!data1.Equals(data2))
				{
					Console.WriteLine("Error: The two values are not equal.");
				}
				else
				{
					Console.WriteLine("The two values are equal.");
					Console.WriteLine("k1 iterations: {0}",k1.IterationCount);
					Console.WriteLine("k2 iterations: {0}",k2.IterationCount);
				}
			}
			catch (Exception e)
			{
				Console.WriteLine("Error: ",e);
			}

		}
	}
}


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.