我有一个Web API项目,在其中一个端点中,我使用Bouncy Castle库生成RSA密钥对。在进行一些负载测试时,在对Web API发出1500个并行请求后,我开始得到504(超时错误)。经过一番调查后,我意识到这是造成它的Bouncy Castle。所以现在我想用一百万个RSA密钥对预加载一张表,并在需要时从表中获取它们。下面是我的代码,我正在生成密钥对使用BC:Bouncy Castle需要很长时间才能生成RSA密钥对
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();
}
那么几个问题,有什么我做错了在上面的代码(它工作正常,但如果有什么我做这可能是造成延迟并可以避免)?另外,如果我采用其他方法(预加载100万个密钥对的SQL表),那么用100万条记录填充表的最佳方法是什么? (最好使用ADO.net)
由于推荐使用1024位以上的2048位密钥,因此情况会变得更糟。也许尝试通过.Net的RSACryptoServiceProvider() - > ExportParameters()进行比较,因为实现将有所不同。 –
我会尝试看看RSACryptoServiceProvider是否有所作为。谢谢 – tavier