C# RNGCryptoServiceProvider和零?

C# RNGCryptoServiceProvider和零?,c#,encryption,.net-4.0,random,rngcryptoserviceprovider,C#,Encryption,.net 4.0,Random,Rngcryptoserviceprovider,在浏览一些Cryptography内容时,我看到,RNGCryptoServiceProvider有两种方法: 及 所以我问: 用一个加密的强随机值序列填充一个字节数组,其中一些(0或更多)为零,这有什么奇怪的? (这是随机值,显然不会有很多零,而且零也是一个正则数) 他们为什么要在.NET framework中创建区别?用于生成用于RSA加密的PKCS#1填充,该加密使用0x00作为分隔符 使用类似Reflector的工具,您可以看到它在中用于按照第8.1.2节实现填充(具有一些漂亮的ASC

在浏览一些Cryptography内容时,我看到,
RNGCryptoServiceProvider
有两种方法:

所以我问:

用一个加密的强随机值序列填充一个字节数组,其中一些(0或更多)为零,这有什么奇怪的? (这是随机值,显然不会有很多零,而且零也是一个正则数)


他们为什么要在.NET framework中创建区别?

用于生成用于RSA加密的PKCS#1填充,该加密使用
0x00
作为分隔符

使用类似Reflector的工具,您可以看到它在中用于按照第8.1.2节实现填充(具有一些漂亮的ASCII艺术,可以更清楚地演示字节布局)


也可以用来制造盐。Cryptography StackExchange站点提供了一个建议,即避免使用
0x00
,有助于使用库和API,这些库和API可能会将salt视为以零结尾的字符串,从而意外地截断salt。然而,除非您正在使用,否则这在.NET中不太可能成为一个问题。

salt只是给rainbow表增加了难度。这也可以用GetBytes来完成……对吗?正确,只要你确定使用或储存盐的地方都没有
0x00
的问题。如果不确定,您总是可以首先使用特定包含
0x00
字节的盐对其进行测试。
RNGCryptoServiceProvider.GetNonZeroBytes
RNGCryptoServiceProvider.GetBytes