Ich habe ein Web-API-Projekt, wo in einem der Endpunkte ich Bouncy Castle-Bibliothek verwenden, um RSA-Schlüsselpaare zu generieren. Bei einigen Lasttests habe ich 504 (Timeout-Fehler) nach 1500 parallelen Anfragen an meine Web-API bekommen. Nach einigen Untersuchungen stellte ich fest, dass es Bouncy Castle war, die es verursachte. Jetzt denke ich daran, einen Tisch mit 1 Million RSA-Schlüsselpaaren vorzuladen und sie von diesem Tisch zu holen, wenn ich sie brauche. Unten ist mein Code, wo ich mit BC bin Erzeugung Keypair:Bouncy Castle braucht lange, um RSA Schlüsselpaar zu generieren
var r = new RsaKeyPairGenerator();
r.Init(new KeyGenerationParameters(new SecureRandom(), 1024));
var keyPair = r.GenerateKeyPair();
var publicKey = string.Empty;
using (var stream = new MemoryStream())
{
var textWriter = new StreamWriter(stream);
var pemWriter = new PemWriter(textWriter);
pemWriter.WriteObject(keyPair.Public);
pemWriter.Writer.Flush();
stream.Position = 0;
var sr = new StreamReader(stream);
publicKey = sr.ReadToEnd();
textWriter.Close();
}
var privateKey = string.Empty;
using (var stream = new MemoryStream())
{
var textWriter = new StreamWriter(stream);
var pemWriter = new PemWriter(textWriter);
pemWriter.WriteObject(keyPair.Private);
pemWriter.Writer.Flush();
stream.Position = 0;
var sr = new StreamReader(stream);
privateKey = sr.ReadToEnd();
textWriter.Close();
}
So paar Fragen, gibt es alles, was ich oben im Code falsch mache (es funktioniert gut, aber wenn ich etwas tue, das ist vielleicht verursacht die Verzögerung und kann vermieden werden)? Wenn ich mit dem anderen Ansatz gehe (Vorladen der SQL-Tabelle mit 1 Million Schlüsselpaaren), was wäre dann der beste Weg, die Tabelle mit 1 Million Datensätzen zu füllen? (vorzugsweise mit ADO .net)
Es wird schlimmer, da ein 2048-Bit-Schlüssel über 1024 Bit empfohlen wird. Vielleicht versuchen Sie dies über die .Net RSACryptoServiceProvider() -> ExportParameters() zum Vergleich, da die Implementierung anders sein wird. –
Ich werde versuchen zu sehen, ob RSACryptoServiceProvider einen Unterschied macht. Danke – tavier