使用System.Security.Cryptography.RNGCryptoServiceProviderSystem.Random的优缺点是什么.我知道RNGCryptoServiceProvider是"更随机的",也就是说,对黑客来说不太可预测.还有其他的优点或缺点吗?


UPDATE:

根据回复,目前使用RNGCryptoServiceProvider的利弊如下:

赞成的意见

  • RNGCryptoServiceProvider是一个更强的加密随机数,这意味着它更适合确定加密密钥等.

欺骗

  • Random更快,因为它是一个更简单的计算;当用于模拟或长时间计算时,如果加密随机性不重要,则应使用此选项.注:有关模拟的详细信息,请参见Kevin's answerRandom不一定是随机的,您可能需要使用不同的非加密PRNG.

推荐答案

密码强的RNG会更慢-它需要更多的计算-而且在 spectral 上是白色的,但不太适合模拟或蒙特卡罗方法,这既是因为它们需要更多的时间,也因为它们可能是不可重复的,这对测试很好.

一般来说,当您想要一个唯一的数字(如UUID)或作为加密密钥时,您需要使用加密PRNG,而为了速度和模拟,您需要使用确定性PRNG.

.net相关问答推荐

Docker镜像mcr.microsoft.com/dotnet/aspnet:8.0不能在Windows上构建

NuGet 兼容与计算框架(Xamarin 和 .NET 6)

查询 MongoDb 中嵌入式文档中的一个字段,该字段抛出调用运算符的左侧必须是对持久属性的直接访问

您可以为 Func 或 Action 类型的函数或子参数指定默认值吗?

.Net MAUI Android 无法与 API localhost 对话

app.config 文件和 XYZ.settings 文件有什么区别?

.Net 中的 Decimal.One、Decimal.Zero、Decimal.MinusOne 的用途是什么

我应该从 .NET 中的 Exception 或 ApplicationException 派生自定义异常吗?

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

大型 WCF Web 服务请求因 (400) HTTP 错误请求而失败

带有输入字段的消息框

如何将 NuGet 与 Visual C# Express 一起使用?

为什么 WCF 中不允许方法重载?

在 .NET (C#) 中本地存储数据的最佳方式

dotnet 恢复警告 NU1701

Dispatcher.CurrentDispatcher 与 Application.Current.Dispatcher

将两个列表映射到 C# 中的字典中

立即检测客户端与服务器套接字的断开连接

无锁多线程适用于真正的线程专家

如何使用 AutoMapper .ForMember?