我想生成随机唯一字符串,如MSDN库生成的字符串:
例如,http://msdn.microsoft.com/en-us/library/t9zk6eay.aspx.应生成类似't9zk6eay'的字符串.
我正在尝试使用一系列可接受的字符生成随机字符串.我有一个工作实现,包含在下面,但我想知道将随机字节转换为可打印字符的逻辑是否会使我暴露于任何风险或无意中暴露其他内部状态.我将可用字符的数量保持为可被256整除的数字,以帮助防止生成的字符串中的不均匀偏差.
using System.Security.Cryptography;
class Example {
static readonly char[] AvailableCharacters = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'
};
internal static string …Run Code Online (Sandbox Code Playgroud) 我想知道如何在C#中生成一个强大而安全的密码.
我用谷歌搜索了一下,在维基百科中看到了这个公式,L密码的长度在哪里,是N可能的符号数:

此外,我发现了这个问题,但由于某种原因,该方法Membership.GeneratePassword只返回一个1位数的随机数,绝对没有密码.所有其余的解决方案都很慢(> = 0.5秒).
我需要帮助实现这个公式(我不知道从哪里开始).您也可以建议另一种解决方案或解释为什么GeneratePassword不起作用.
首先我在电话上,所以请原谅糟糕的格式!
我现在已经做了很多搜索,但没有找到明确的答案.如果没有一个,那么公平,但我确信有人比我必须有一个好答案更聪明!
我正在使用RNG加密提供程序以真正天真的方式生成范围内的数字:
byte[] bytes = new byte[4];
int result = 0;
while(result < min || result > max)
{
RNG.GetBytes(bytes);
result = BitConverter.ToInt32(bytes);
}
Run Code Online (Sandbox Code Playgroud)
当范围足够宽以便有可能获得结果时,这是很好的,但是今天早些时候我遇到的范围足够小(在10,000个数字内)可能需要一个年龄.
所以我一直在努力想出一个更好的方法来实现合理的分配,但会更快.但现在我正在深入研究我在学校里没有做过的数学和统计数据,或者至少如果我这样做,我已经忘记了这一切!
我的想法是:
就像我说的那样,这可能非常幼稚,但我相信它会在比目前的实施更快的范围内返回一个匹配.我现在不在电脑前所以无法测试,将在明天早上英国时间这样做.
但当然速度并不是我唯一关心的问题,否则我只会使用随机(如果有人愿意的话,那里需要一些刻度线来正确格式化 - 它们不在Android键盘上!).
我对上述方法的最大担忧是,我总是丢掉由prng生成的最多7位,这看起来很糟糕.我想到了将它们考虑在内的方法(例如一个简单的添加),但它们看起来非常不科学的黑客!
我知道mod技巧,你只需要生成一个序列,但我也知道它的弱点.
这是死路一条吗?最终,如果最好的解决方案是坚持当前的实现,我会觉得必须有更好的方法!
是否有替代System.Web.Security.Membership.GeneratePasswordin AspNetCore(netcoreapp1.0).
最简单的方法是使用一个Guid.NewGuid().ToString("n")足够长的密码,但它不是完全随机的.
asp.net asp.net-mvc asp.net-core asp.net-core-1.0 .net-standard-1.5
是否有任何内置函数可以创建随机密码?Asp.net简单的memebership曾经有过类似的方法
注意:为简洁起见,以下内容无法区分随机性和伪随机性.此外,在此上下文中,约束意味着给定的最小值和最大值之间)
本System.Random类提供随机生成整数,双打和字节数组.使用Random.Next,可以轻松生成类型为布尔值,字符,(S)字节,(U)Int16,(U)Int32的随机约束值.使用时Random.NextDouble(),可以类似地生成Double和Single类型的约束值(就我对此类型的理解而言).随机串生成(给定长度和字母的)已经 也 被 解决 之前.
考虑剩余的原始数据类型(不包括Object):Decimal和(U)Int64.他们的随机生成也已被解决(Decimal,(U)Int64使用Random.NextBytes()),但不受限制.理论上可以使用拒绝采样(即循环直到生成的值是所需范围),但这显然不是一个实际的解决方案.归一化NextDouble()不起作用,因为它没有足够的有效数字.
简而言之,我要求正确实现以下功能:
long NextLong(long min, long max)
long NextDecimal(decimal min, decimal max)
Run Code Online (Sandbox Code Playgroud)
请注意,由于System.DateTime基于ulong,第一个函数也允许随机约束生成此类结构(类似于此处,仅在刻度而不是分钟内).
我使用此源代码生成随机密码:
public string GetRandomPasswordUsingGUID(int length)
{
// Get the GUID
string guidResult = System.Guid.NewGuid().ToString();
// Remove the hyphens
guidResult = guidResult.Replace("-", string.Empty);
// Make sure length is valid
if (length <= 0 || length > guidResult.Length)
throw new ArgumentException("Length must be between 1 and " + guidResult.Length);
// Return the first length bytes
return guidResult.Substring(0, length).ToUpper();
}
Run Code Online (Sandbox Code Playgroud)
它在调用方法时工作正常,但不在"for"循环语句中.
在这种情况下,它会生成一些错误的重复密码.
例如像这样:
A4MNB597D7
AMGJCCC902
AWJ80CF6HX
A78EDJECIW
A78EDJECIW
A78EDJECIW
A78EDJECIW
A78EDJECIW
A2LYJCH23N
A2LYJCH23N
Run Code Online (Sandbox Code Playgroud)
如何在"For"循环语句中创建随机密码?
我正在尝试编写一个简单的Gui来生成随机密码.我试图使用的代码是:
using System.Web.Security;
Password_txtBx.Text = Membership.GeneratePassword(12, 1);
我收到错误:"当前上下文中不存在名称'Membership'"
我已将代码更改为:
Password_txtBx.Text = System.Web.Security.Membership.GeneratePassword(12, 1);
我得到的错误消息是:"命名空间'System.Web'中不存在类型或命名空间'SecurityMembership'(你是否缺少程序集引用?)"
我在上面两个例子中都引用了System.Web.Security.有什么方法可以解决我的问题吗?
我正在制作一个应用程序来生成密码,现在我已经编写了一个单元测试,以测试当你生成2个密码时它们是唯一的,但我遇到的问题是它们不是唯一的,而是相同的.
单元测试:
[TestMethod]
public void PasswordGeneratorShouldRenderUniqueNextPassword()
{
// Create an instance, and generate two passwords
var generator = new PasswordGenerator();
var firstPassword = generator.Generate(8);
var secondPassword = generator.Generate(8);
// Verify that both passwords are unique
Assert.AreNotEqual(firstPassword, secondPassword);
}
Run Code Online (Sandbox Code Playgroud)
我想这里的东西是错的:
for (int i = 0; i < length; i++)
{
int x = random.Next(0, length);
if (!password.Contains(chars.GetValue(x).ToString()))
password += chars.GetValue(x);
else
i--;
}
if (length < password.Length) password = password.Substring(0, length);
return password;
Run Code Online (Sandbox Code Playgroud)
随机:
Random random = new Random((int)DateTime.Now.Ticks);
Run Code Online (Sandbox Code Playgroud) 如何在ASP.net中生成固定长度的随机密码(无GUID)?生成随机密码后,我需要将密码通过电子邮件发送给指定的用户.
c# ×11
random ×6
.net ×4
asp.net ×4
asp.net-mvc ×2
passwords ×2
asp.net-core ×1
security ×1
unit-testing ×1
winforms ×1