C# 未定义RandomNumberGenerator GetInt32

C# 未定义RandomNumberGenerator GetInt32,c#,random,C#,Random,为了安全起见,我必须在我工作的源代码中的多个位置更改随机数生成,以使用RandomNumberGenerator类而不是random类 在查看了之后,我想我必须使用Create()方法来创建RandomNumberGenerator的实例。一切都很好,我可以毫无问题地使用GetBytes()函数,但我似乎无法使用用于生成int的GetInt32()。我首先尝试从实例调用它,然后在文档中看到它是一个静态函数,所以我尝试像这样调用它RandomNumberGenerator.GetInt32(256

为了安全起见,我必须在我工作的源代码中的多个位置更改随机数生成,以使用RandomNumberGenerator类而不是random类

在查看了之后,我想我必须使用Create()方法来创建RandomNumberGenerator的实例。一切都很好,我可以毫无问题地使用GetBytes()函数,但我似乎无法使用用于生成int的GetInt32()。我首先尝试从实例调用它,然后在文档中看到它是一个静态函数,所以我尝试像这样调用它
RandomNumberGenerator.GetInt32(256)
,但它不包含定义,intellisense建议我的唯一方法是创建,Equals和ReferenceEquals我很困惑为什么

我包含名称空间System.Security.Cryptography

我试着在谷歌上搜索一下实现,或者其他人是否也有同样的问题,但我找不到任何相关的东西


编辑:我们使用的是.NETFramework4.8,所以我一直在看错误的文档和文档。这一个不包含GetInt32或类似的定义,因此现在我不确定应该使用什么来安全地生成随机整数。

鉴于您正在使用的.NET Framework版本不支持
RandomNumberGenerator.GetInt32()
静态方法,获取整数的简单方法是获取一些随机字节,然后使用
位转换器
将其转换为整数:

byte[] rngBytes = new byte[4];

// This could be replaced by your instance of RandomNumberGenerator
RandomNumberGenerator.Create().GetBytes(rngBytes);

// Convert the bytes into an integer
int myInt = BitConverter.ToInt32(rngBytes);

注意:您应该知道,给定的整数
myInt
可能是负数,因为这将简单地将字节转换为等效的整数值。您可以在转换之前简单地删除前导位,或者只执行
myInt=0-myInt
获得肯定值。

在“应用于”中,您可以看到指定的方法在3.0之前的.NET Framework或.NET Core版本中不可用,因此我猜您正在使用其中一种方法。^^^换句话说:请添加您使用的框架和版本,以便我们提出建议。是的,我刚刚注意到。我们使用的是.NET framework 4.8,所以这是我应该阅读的文档。似乎这没有GetInt32方法或类似的方法,所以我不确定应该使用什么来生成随机Ints。您可以使用
GetBytes
来获取4个字节并转换结果,就像(填充
Span
的方法不可用,但想法是一样的)。如果您坚持使用该版本(我想您是这样),我会看看GetInt32是如何实现的,只是“受到启发”这是非常有帮助的,看起来是一个简单的解决方案,尽管我不确定如何实现它,以便精确定义范围?这是必要的。@66Gramms请查看Jeroen在其评论中给出的链接。范围在那里得到了处理。当然,您需要稍微调整原始实现。@66Gramms你需要什么范围?有一种简单的方法可以将数字限制在一个范围内,但可能会有模偏差,这取决于它是如何完成的。我想我将使用Jeroen链接的核心实现,谢谢你的帮助