我一直试图找出RNGCryptoServiceProvider.GetBytes的实现来回答标题问题。
要改写,GetBytes方法是否生成一个流/位数组,然后只是顺序地将它们写入字节数组,这样我就可以通过按顺序循环遍历字节来重新创建原始流/数组并查看每个字节中的位?
我检查了此处的源代码:rngcryptoserviceprovider.cs,但它显然调用out to the CLR,我不知道如何获取源代码。
[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
[ResourceExposure(ResourceScope.None)]
private static extern void GetBytes(SafeProvHandle hProv, byte[] randomBytes, int count);
答案 0 :(得分:0)
阅读评论以获取更多信息后,我认为,我知道您在问什么...
因此,实际上,您应该使用RNGCryptoServiceProvider的ID tokens
方法。这将防止您连续接收8个零位,这会影响您的统计方法。然后,正如blorgbeard-is-out指出的那样:“字节是随机且均匀分布的,每个位也应该是随机且均匀分布的。”
此外,RNGCryptoServiceProvider的使用可能有些棘手,因此我提供了一个简短的示例,以及如何将字节数组转换为位:
GetNonZeroBytes(byte[] data)