2016-07-28 16 views
27

Ich kann die System.Security.Cryptography.RNGCryptoServiceProvider-Klasse in .NetCore nicht finden.RNGCryptoServiceProvider in .Net Core

Es ist wichtig für die Anwendung, die ich versuche, von .NET Framework zu portieren, wie es verwendet wird, um einen Initialisierungsvektor für die Verschlüsselung zu generieren.

Existiert es unter einem anderen Namen oder gibt es eine andere Möglichkeit, diese Funktionalität zu erreichen?

Antwort

8

Eine der vorgeschlagenen Lösungen ist RandomNumberGenerator.Create zu verwenden() https://github.com/dotnet/corefx/issues/2881

+1

Dies ist wahrscheinlich die richtige Antwort, aber Sie müssen angeben, * warum * das ist der Fall. Z.B. Liefert 'RandomNumberGenerator' kryptografisch sichere Zufallszahlen? Und wenn ja, warum und wie? Beachten Sie, dass Link-Only-Antworten in der Regel "verpönt" sind. –

44

System.Security.Cryptography.RandomNumberGenerator ist die Basisklasse für Kryptographisch-Secure Pseudo-Random Number Generator (CSPRNG) Implementierungen. In .NET Framework RandomNumberGenerator.Create() wird eine RNGCryptoServiceProvider Instanz zurückgegeben (sofern nicht anders durch CryptoConfig konfiguriert). In .NET Core gibt RandomNumberGenerator.Create() einen undurchsichtigen Typ zurück, der auf BCryptGenRandom (Windows) oder dem Zufallszahlengenerator von OpenSSL (! Windows) basiert.

RandomNumberGenerator.Create() ist die einzige Möglichkeit, eine RNG-Instanz auf .NET Core zu erhalten, und da es auf .NET Core und .NET Framework funktioniert, ist es am portabelsten.

Natürlich, wenn Sie eine IV generieren, können Sie auch einfach die Instanzmethode SymmetricAlgorithm.GenerateIV() aufrufen, damit CSPRNG intern verwendet wird; obwohl, wie die Dokumentation sagt, ein Aufruf ist unnötig, da ein zufälliger IV mit der Instanz erzeugt wird (GenerateIV kann verwendet werden, um zu erzwingen, eine neue vor dem nächsten Aufruf an CreateEncryptor zu erzeugen).

Verwandte Themen