- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个X509Certificate2
实例,并获取其PrivateKey
属性,这是一个 RsaCryptoServiceProvider
。 MSDN 文档表明此 RsaCryptoServiceProvider
类不是线程安全的。因此,如果给定一些 X.509 证书,我需要在多个线程上执行非对称加密(通常在 Web 服务器上),创建 RsaCryptoServiceProvider
的多个实例的最佳方法是什么? ?
X509Certificate2
上的私钥没有标记为可导出,所以我不能简单地导出原始 RsaCryptoServiceProvider
上的参数并将它们重新导入到另一个实例中以解决线程安全问题。
我通过X509Store
获得了原件,但这似乎是 X509Certificate2
的集合例如,如果我想要 RsaCryptoServiceProvider
的新实例我必须实例化一个新 X509Store
找到一个新 X509Certificate2
,获得新 RsaCryptoServiceProvider
。让 .NET 克隆 RsaCryptoServiceProvider
看起来非常重量级。实例。
还有更好的方法吗?
最佳答案
尽管 RsaCryptoServiceProvider 的 MSDN 文档声明它不是线程安全的,但它的线程安全性似乎足以同时在多个线程上进行加密/解密。我编写了以下应用程序来使用此类测试高并发性,并且它根本没有崩溃或无法正确加密/解密:
using System;
using System.Diagnostics;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
namespace ConsoleApplication1 {
class Program {
static bool exit;
static void Main(string[] args) {
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try {
store.Open(OpenFlags.OpenExistingOnly);
Func<RSACryptoServiceProvider> rsaFactory = null;
X509Certificate2 winningCert = null;
exit = true;
foreach (X509Certificate2 cert in store.Certificates) {
try {
var result = store.Certificates.Find(X509FindType.FindByThumbprint, cert.Thumbprint, false).Cast<X509Certificate2>().FirstOrDefault();
rsaFactory = () => (RSACryptoServiceProvider)result.PrivateKey;
UseRsa(rsaFactory());
winningCert = cert;
break;
} catch (CryptographicException) {
Console.WriteLine("Cert {0} failed", cert.Thumbprint);
}
}
exit = false;
Console.WriteLine("Winning cert: {0}", winningCert.Thumbprint);
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)winningCert.PrivateKey;
rsaFactory = () => rsa;
Thread[] threads = new Thread[16];
for (int i = 0; i < threads.Length; i++) {
threads[i] = new Thread(state => UseRsa(rsaFactory()));
threads[i].Start();
}
Thread.Sleep(10000);
exit = true;
for (int i = 0; i < threads.Length; i++) {
threads[i].Join();
}
Console.WriteLine("Success.");
} finally {
store.Close();
}
}
static void UseRsa(RSACryptoServiceProvider rsa) {
var rng = RandomNumberGenerator.Create();
var buffer = new byte[64];
do {
rng.GetBytes(buffer);
var cipher = rsa.Encrypt(buffer, true);
var plaintext = rsa.Decrypt(cipher, true);
for (int i = 0; i < buffer.Length; i++) {
if (buffer[i] != plaintext[i]) {
Debugger.Break();
}
}
} while (!exit);
}
}
}
关于asp.net - 缓解 Web 服务器上的 RsaCryptoServiceProvider 线程安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6140764/
在我早期的 R 生活中,当涉及到目录和子目录之间的分隔符时,我发现了 R 和 Windows 在不同页面上的痛苦。尽管我知道这个问题,但我仍然因为必须手动在所有反斜杠前面放置一个反斜杠或用正斜杠替换所
我正在尝试使用名为 easeInBounce 的缓动 jQuery 函数,但它不起作用。我搜索了所有相关内容,所有页面都说我必须像这里一样放置 {easing:'easeInBounce'} 但它不起
我不明白为什么使用 fgets 获取输入总是给我的程序“密码错误”。 但是,当我使用 gets() 时,比如 gets(array); 它起作用了。 预期输出:当密码错误时,打印“Wrong Pass
我刚刚给了this Hadoop tuorial在 JobTracker 中读取 Hadoop 有跟腱(单点故障)的状态: The JobTracker is a single point of fa
我有一个关于 csrf 缓解的问题。文献建议在每个页面上使用 token ,该 token 必须与任何表单一起提交 - 此 token 必须有效才能进行交易。 页面上的 token 如何防止 csrf
.NET 中是否有任何预先存在的方法来检测/防止 xpath 注入(inject)攻击? 我可以预见 2 个例子,但可能还有更多。 例如 "/Some/XPath/" + UntrustedNodeN
我已经在 http://jsfiddle.net/GxpSQ/ 上发布了一个代码有一个工作代码。单击该框,它将随机播放。 基于 hungred.com 我的代码基于此示例 http://hungred
我最近不得不迁移一个由负载均衡器和三个后端组成的基础架构。每个后端都设置了 apache2 来处理 HTTP/HTTPs 请求,并通过 AJP 协议(protocol)将它们转发到 tomcat 服务
系统的一个模块处理基于 JSON 的协议(protocol),该协议(protocol)用于传输各种数据。这导致了将近一百个小代码段,如下所示: /* * Data package Foo re
我希望有人能够帮助我理解这个问题,以及我是否需要采取任何额外步骤来保护我的应用程序。 阅读此特定漏洞,它似乎会影响符合以下条件的服务器: 从使用 HTTP 级压缩的服务器提供服务 在 HTTP 响应主
我希望能够在具有 REPR CStruct/CPointer 的类中使用双指针: typedef struct CipherContext { void *cipher;
我有一个X509Certificate2实例,并获取其PrivateKey属性,这是一个 RsaCryptoServiceProvider 。 MSDN 文档表明此 RsaCryptoServiceP
我们用于安全测试的第三方工具在 Tomcat 8 上存在慢速 HTTP POST 漏洞。我们在应用程序中有一个简单的 Spring Controller 和 JSP。 现有的 Tomcat 连接器配置
我已经设置了useHttpOnly=true在 tomcat context.xml 中,并且正在使用使用 java keytool 在 server.xml 连接器元素支持中生成的自签名证书来支持
根据 Azure 文档 github 问题 ( https://github.com/MicrosoftDocs/azure-docs/issues/75652 ) 中的 Azure 支持响应,Lin
我正在对我的 Java 代码执行 veracode 扫描,它在我的 DAO 类之一中引发以下错误 SQL 命令中使用的特殊元素的不正确中和(“SQL 注入(inject)”)CWE ID 89 但是,
我正在使用 Mongoose ODM wrapper对于 NodeJS,我担心注入(inject)攻击。假设我有以下架构: const UserSchema = new mongoose.Schema
我们有一个 jaxrs 服务,不幸的是执行了原始查询,没有准备好的语句。我们使用 ESAPI 来缓解 XSS、SQLI。如下所示: private String mitigateSQLI(String
我正在尝试减轻我们对 Poodle SSL 3.0 Fallback 的脆弱性攻击。我们的管理员已经开始禁用 SSL 以支持 TLS 用于与我们服务器的入站连接。我们还建议我们的团队在他们的网络浏览器
我在 Heroku 上有一个应用程序(免费计划),并且在从 Django 管理上传媒体文件时经常收到应用程序错误。我使用 S3 来提供静态和媒体服务。通过 django admin 直接将文件上传到
我是一名优秀的程序员,十分优秀!