2010-11-20 8 views

Antwort

4

ich auf den folgenden Code einige Test haben, und die exportierten Parameter sind immer anders:

var rsaAlgo1 = new RSACryptoServiceProvider(); 
var rsaAlgo2 = new RSACryptoServiceProvider(); 

var xml1 = rsaAlgo1.ToXmlString(true); 
var xml2 = rsaAlgo2.ToXmlString(true); 

if (xml1 != xml2) 
{ 
    // it always goes here... 
} 
+1

Dieser Code funktioniert, aber es ist eine sehr gefährliche Art. Die 'Create()' -Methode, die Sie aufrufen, ist eigentlich eine statische Methode in der abstrakten 'RSA'-Klasse (die Oberklasse zu' RSACryptoServiceProvider') und erstellt eine Instanz der Standardimplementierung der 'RSA' Auf den meisten Systemen ist dies "RSACryptoServiceProvider" - aber nicht auf allen. Ein besserer Stil wäre entweder "var rsa = RSA.Create()" oder "var rsa = new RSACryptoServiceProvider". –

+0

@Rasmus: Du bist richtig bearbeitet, danke;) – digEmAll

+1

Beachten Sie, dass Sie für den praktischen Gebrauch eine Schlüsselgröße angeben sollten (zB 2048 b its) anstelle des Standardkonstruktors. – CodesInChaos

0

den folgenden Code verwenden Sie nie

var rsa = new RSACryptoServiceProvider(); 
var rsaParams = rsa.ExportParameters(true); 
alle die gleichen Schlüssel heraus

bekommen sollte

Allerdings sollten Sie beachten, dass der Exponent Schlüssel der gleiche sein kann und wenn oft ist 65537 (0x010001)

„Wählen Sie eine ganze Zahl e, so dass 1 < e < φ (n) und gcd (e, φ (n)) = 1; h., e und φ (n) sind Gemeinsamkeiten. e wird als Exponent des öffentlichen Schlüssels freigegeben. e mit einer kurzen Bitlänge und einem kleinen Hamming-Gewicht führt zu einer effizienteren Verschlüsselung - am häufigsten 216 + 1 = 65.537. Jedoch viel kleinere Werte von e (wie 3) wurden weniger sicher in einigen Einstellungen werden angezeigt.“ RSA wiki