我正在寻找代码来为显示的字符串生成相同的密码。 就像挑战和回应一样。
我想基于c#做一个非常简单的winform,我将在其中输入一个名称,并获得一个代表该名称密码的随机字符串。
例如:我将输入“Bob”,点击“生成密码”并获取例如“hakdn11jhfh32”(随机的东西),然后为“David”这个名称我将获得另一个密码,但是当我要再次输入“Bob”我将获得Bob之前的密码(“hakdn11jhfh32”)。
有简单的方法吗?
我实际上只想给一个字符添加一些字符(例如:a = 8j2,5 = j1mm .....)然后只为每个给出的名字替换。 但我希望有更简单,更自动的东西。
答案 0 :(得分:3)
您所描述的是散列。这是一篇官方文章:
http://msdn.microsoft.com/en-us/library/aa545602%28v=cs.70%29.aspx
此外,本文提供了一小段代码:
http://www.techpowerup.com/forums/threads/c-hash-encryption-example.62293/
public string GeneratePasswordHash(string thisPassword)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] tmpSource;
byte[] tmpHash
tmpSource = ASCIIEncoding.ASCII.GetBytes(thisPassword); // Turn password into byte array
tmpHash = md5.ComputeHash(tmpSource);
StringBuilder sOuput = new StringBuilder(tmpHash.Length);
for (int i = 0; i < tmpHash.Lenth; i++)
{
sOutput.Append(tmpHash[i].ToString(“X2”)); // X2 formats to hexadecimal
}
return sOutput.ToString();
}
答案 1 :(得分:1)
您可以使用伪随机数生成器的属性,该生成器允许您对其序列进行种子处理。制作一个这样的随机数生成器:
String name = "Bob";
Random rnd = new Random(name.hashCode());
现在,您可以使用rnd.nextInt(numChars)
生成一串随机字符代码,其中numChars
是可以出现在密码中的字符数:
StringBuilder pwd = new StringBuilder();
int numCharInPassword = 8;
String legalChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*/{}[]\|";:<>()+=";
for (int i = 0 ; i != numCharInPassword ; i++) {
pwd.append(legalChars.charAt(rnd.nextInt(legalChars.length())));
}
这可以保证以相同名称开头并使用相同的预设密码将生成相同的密码。有时,不同的名称也可以生成相同的密码,但这不太可能。