Roy*_*mir 9 c# random encryption .net-4.0 rngcryptoserviceprovider
走过一些cryptogtaphy的东西,我看到RNGCryptoServiceProvider
有两种方法:
RNGCryptoServiceProvider.GetNonZeroBytes
Run Code Online (Sandbox Code Playgroud)
和
RNGCryptoServiceProvider.GetBytes
Run Code Online (Sandbox Code Playgroud)
所以我问:
用一个加密强大的随机值序列填充一个字节数组是多么奇怪,其中一些(0或更多)是零? (它是随机值,显然不会有很多零,仍然为零也是常规数字)
为什么他们创造了区别?
Ash*_*oss 11
在.NET框架内,GetNonZeroBytes(byte [])用于生成用于RSA加密的PKCS#1填充,0x00
用作分隔符.
使用像Reflector这样的工具,您可以看到它在RSAPKCS1KeyExchangeFormatter.CreateKeyExchange(byte [])中用于实现根据RFC 2313,第8.1.2节的填充(RFC 3218有一些很好的ASCII艺术,可以更清楚地演示字节布局).
GetNonZeroBytes(byte [])也可用于生成salt.Cryptography StackExchange站点有一个类似的问题,建议避免0x00
使用可能将盐视为零终止字符串的库和API,这会意外截断盐.但是,除非使用P/Invoke,否则这不太可能成为.NET中的一个问题.
归档时间: |
|
查看次数: |
1287 次 |
最近记录: |