问题标签 [rngcryptoserviceprovider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
596 浏览

c# - 如何使用 RNGCryptoServiceProvider 生成桥牌?

桥牌游戏使用 52 张不同的扑克牌,随机分配给四名玩家,每名玩家最终得到 13 张牌:所谓的“发牌”。大约 2^96 次过桥交易是可能的。在本文档中,生成随机交易的程序的要求如下所述:

  1. 该软件应该能够生成所有可能的过桥交易,因为手动交易也可以做到这一点。
  2. 软件应该以相同的概率生成每笔交易,不受板数、前手或任何其他情况的影响。
  3. 即使在会话中查看了所有其他交易之后,也应该无法预测交易。

该文档继续指出,伪随机生成器不能用于生成交易,因为看到伪随机序列的第一个元素将能够计算所使用的种子,从而使黑客能够预测接下来的交易。

此外,由于大多数伪随机生成器采用 32 位的种子,因此应该遵循这些生成器最多能够产生 2^32 个不同的桥接交易,而不是所需的 2^96 个,并且遵循所谓的生日悖论,在 2^32 笔交易的平方根之后,很可能会产生相同的交易。

描述桥接交易生成应用程序要求的文档的作者编写了一个程序,该程序在世界范围内用于生成随机交易,该程序使用人类在键盘上随机打字生成一个 96 位种子。十四年来,这种方法没有发现任何缺陷。

我想编写一个例程,无需使用人工输入来生成所需的种子。

进来了RNGCryptoServiceProvider。我使用下面的代码生成随机数,首先在 1 到 52 范围内,然后在 1 到 51 范围内,依此类推,直到剩下一张牌。

测试产生的交易我非常有信心这段代码能够以相同的概率产生能够产生的任何交易,并且任何一张牌最终与四名玩家之一的机会都等于 0.25。

但是由于我不知道 RNGCryptoServiceProvider 中使用的种子的强度,我想知道是否:

  1. 此代码将能够或可以适应产生 2^96 种不同的交易。
  2. 这段代码的下一笔交易是不可预测的。

编辑 这个问题中前面提到的获取随机数的方法是有缺陷的。这分散了主要问题的注意力,即这段代码是否能够产生 2^96 个不同的桥接交易。我用Stephen Taub 和 Shawn Farkas 在 MSDN 杂志上发表的随机数生成器替换了随机数生成器

用于生成范围为 1-52、1-51 等直到 1-2 的加密安全随机数的代码,取自本网站

0 投票
2 回答
1573 浏览

random - 如何使用 RNGCryptoServiceProvider C# 生成非负随机数(整数)

我需要在我的代码中生成非负随机整数。下面的示例生成整数;

参考: http: //www.dotnetperls.com/rngcryptoserviceprovider 但它给出了正值和负值。如何只生成非负随机整数?我之前使用的是 Random.Next() ,它给了我正整数。

0 投票
1 回答
80 浏览

c# - 范围内的随机线程静态数

如何使用 threadstatic 种子从一系列数字中生成随机数?

我需要在多种方法的范围内创建随机数。问题是相同的旧副本。

我找到了一个 MSDN 博客,它有一个很好的随机生成器,但我需要一个介于两个值之间的范围(通常是 0 - 100)。

http://blogs.msdn.com/b/pfxteam/archive/2009/02/19/9434171.aspx

当我循环时,我想传递一个范围

我在这里阅读了数十篇文章,但找不到范围的示例。

生成数字的字节方式看起来很干净,但我无法让它在一个范围内工作。我应该传递整数还是加倍并乘以?或者如何在具有开始和结束范围的 Next 的重载中使用该缓冲区值?

0 投票
1 回答
121 浏览

c# - Window Phone 8.1 中的 RNGProvider 在哪里

我正在为 Windows Phone 8.1 开发一个 SDK(Nuget 包)。我已经有一个使用RNGCryptoServiceProvider的 Windows Phone 8 版本。但是在为 Windows Phone 8.1 开发时,我发现这个类在System.Security.Cryptography(现在是Windows.Security.Cryptography)中不再可用。

请问有谁知道这个班现在在哪里?如果根本不存在,我怎样才能获得类似的服务?

谢谢。

0 投票
0 回答
118 浏览

c# - 如何使用具有密码哈希的目录服务 AccountManagement 对用户进行身份验证

如果我在上面的代码片段中传递了正确的密码,则身份验证工作正常,但假设我没有密码但我已获得密码哈希,我将如何仅在上面的行中使用哈希进行身份验证而不知道真正的密码字符串?

让我们假设密码哈希是使用此类创建的https://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx

或者,如果上述方法不可行,是否可以至少获取给定帐户的密码哈希,以便我可以将从 AD 返回的密码哈希与提供的哈希进行比较以检查它们是否匹配?

0 投票
1 回答
979 浏览

c# - C# RNGCryptoServiceProvider GetBytes(大字节数组)与循环 GetBytes(1 字节)

我想知道以下之间的安全性是否存在差异:

案例一:

案例 B:

我想知道是因为我受到了MSDN示例的启发。由于在有限值上使用模数的不公平分配,它基本上检查接收到的字节是否公平。(我正在构建一个随机字符串生成器,我不想让字母表中的字符具有不公平分布的优势)

所以基本上我的问题是,我是否循环“GetBytes”来获取N个字节(案例b)或直接使用“GetBytes”来获取N个字节(案例a)在安全性方面是否存在差异。

感谢您的时间

0 投票
0 回答
190 浏览

c# - 使用 SQL 中的密码哈希对 Windows C# 进行身份验证

我的计划如下:

  • 将登录名添加到 SQL 数据库。
  • 针对这些用户中的每一个,将服务帐户用户名和密码保存到 SQL 数据库,作为哈希。
  • 用户在他们的 PC 上打开应用程序,它会读取他们的登录名,检查服务帐户凭据是否存在,如果存在,将其拉下并使用它们对域网络进行身份验证。
  • 如果用户的登录名不存在,则抛出错误。

这可能吗?如果是这样,有谁知道如何翻译 Windows 身份验证的哈希?

0 投票
1 回答
90 浏览

.net - sha1 .net 会员提供者中盐的种子

SHA1 哈希的密码盐是使用以下函数生成的:

什么用作 RNGCryptoServiceProvider 的种子?

可以通过以某种方式将相同的种子提供给 RNGCryptoServiceProvider 来重建 asp.net 4.0 成员资格提供程序中注册用户的密码盐值吗?

0 投票
1 回答
773 浏览

cryptography - 如何在 url/查询字符串中使用 RNGCryptoServiceProvider 生成的字符串

注意:我已经解决了这篇文章中提到的问题。在做了很多谷歌之后,我找不到正确的解决方案。现在我知道答案了。我认为这篇文章将节省其他开发人员尝试解决相同问题的时间。

问题

我想生成加密随机字符串并将其作为 url 的一部分发送给用户。使用 Base64 字符串,您可能会收到错误:

请求过滤模块用于拒绝包含双转义序列的请求

否则它将找不到您的路线。

因此,您要么破解/解决方法并在 Base64 字符串上查找/替换转义字符,要么使用此解决方案。

这就是我的原始代码的样子。

解决方案是 UrlTokenEncode。添加了将随机字节转换为 Url Encoded Token 的新方法。

0 投票
0 回答
124 浏览

c# - RNGCryptoServiceProvider 标准化值分布

我在 using 块中使用 C# RNGCryptoServiceProvider

然后将结果值归一化为区间 [0:15],因此不会有模偏差影响输出。

标准化以这种方式完成:

其中 maxRandomValue 等于 15。

但是,从第一次测试开始,输出似乎并不统一。我已经生成了 2916 个数字,这是值分布:

如您所见: 6 --> 生成数字的 5.49% 14 --> 生成数字的 7.17%

我担心的是,也许我只生成了很少的数字,并且随着数量的增加,分布变得均匀。或者,使用中的 RNGCryptoServiceProvider 未按预期工作。

你有什么主意吗?