C# RNGCryptoServiceProvider和零?
在浏览一些Cryptography内容时,我看到,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
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