【问题标题】:RNGCryptoServiceProvider and Zeros?RNGCryptoServiceProvider 和 Zeros?
【发布时间】:2012-10-03 07:33:24
【问题描述】:

浏览了一些密码学的东西,我看到RNGCryptoServiceProvider 有两种方法:

link

RNGCryptoServiceProvider.GetNonZeroBytes

RNGCryptoServiceProvider.GetBytes 

所以我问:

odd 是什么? (它是随机值,显然不会有很多零,仍然零也是一个常规数字)

他们为什么要创造与众不同的东西?

【问题讨论】:

    标签: c# encryption .net-4.0 random rngcryptoserviceprovider


    【解决方案1】:

    在 .NET 框架中,GetNonZeroBytes(byte[]) 用于为 RSA 加密生成 PKCS#1 填充,它使用 0x00 作为分隔符。

    使用 Reflector 之类的工具,您可以看到它在 RSAPKCS1KeyExchangeFormatter.CreateKeyExchange(byte[]) 中用于按照 RFC 2313 的第 8.1.2 节实现填充(RFC 3218 有一些很好的 ASCII 艺术可以更清楚地展示字节布局)。

    GetNonZeroBytes(byte[]) 也可用于生成盐。 Cryptography StackExchange 站点有a similar question,这表明避免0x00 是为了帮助可能将salt 视为以零结尾的字符串的库和API,这会意外地截断salt。但是,除非使用 P/Invoke,否则这在 .NET 中不太可能成为问题。

    【讨论】:

    • 盐只是给彩虹桌增加了难度。它也可以用 GetBytes 完成....对吗?
    • 正确,只要您确定使用或储存盐的地方都没有0x00 的问题。如果不确定,您总是可以先用一些专门包含 0x00 字节的盐来测试它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2018-10-17
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多