myBB密码c#客户端
我正在加载器/客户端上工作,我的论坛用户将使用他们的myBB信息登录到我的应用程序。我知道在应用程序中建立数据库连接并不好。但是我也将他们的hwid存储在数据库中,所以我需要连接到它。myBB密码c#客户端
然而,它们存储密码是这样的:
$hashedpsw = md5(md5($salt).md5($plainpassword));
而我试图重现口令是这样的:
string salt = "D4UFUd6U"; // get salt from db
string password = "test!";// get password from user
MD5 md5 = new MD5CryptoServiceProvider();
// Create md5 hash of salt
byte[] saltBytes = Encoding.Default.GetBytes(salt);
byte[] saltHashBytes = md5.ComputeHash(salt);
string saltHash = System.BitConverter.ToString(saltHashBytes);
// Create your md5(password + md5(salt)) hash
byte[] passwordBytes = Encoding.Default.GetBytes(password + saltHash);
byte[] passwordHashBytes = md5.ComputeHash(salt);
string passwordHash = BitConverter.ToString(passwordHashBytes);
,但我得到了以下错误:
cannot convert from 'string' to 'System.IO.Stream'
ComputeHash想要一个IO.Stream
或Byte[]
作为输入,并且如错误指定的那样,不能从您的字符串隐式转换为IO.Stream
。
以下是(从this answer被盗)的你怎么能一个字符串转换成流的示例:
public Stream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
这将改变你的代码如下:
string salt = "D4UFUd6U"; // get salt from db
string password = "test!";// get password from user
MD5 md5 = new MD5CryptoServiceProvider();
// Create md5 hash of salt
byte[] saltBytes = Encoding.Default.GetBytes(salt);
byte[] saltHashBytes;
using(Stream saltStream = GenerateStreamFromString(salt))
{
salteHashBytes = md5.ComputeHash(saltStream);
}
string saltHash = System.BitConverter.ToString(saltHashBytes);
// Create your md5(password + md5(salt)) hash
byte[] passwordBytes = Encoding.Default.GetBytes(password + saltHash);
byte[] passwordHashBytes;
using(Stream saltStream = GenerateStreamFromString(salt))
{
passwordHashBytes = md5.ComputeHash(saltStream);
}
string passwordHash = BitConverter.ToString(passwordHashBytes);
任何时候你使用流时,总是建议你用using语句包装它,这样即使抛出异常,它在完成时也会正确关闭。 byte [] saltHashBytes;使用(Stream saltStream = GenerateStreamFromString(salt)){saltHashBytes = md5.ComputeHash(saltStream); } –
伟大的提示!随意编辑我的答案:) – Tobbe
已编辑。虽然我没有在代码中检查* HashBytes数组变量在传递到BitConverter.ToString()方法之前是否为空。 –
您使用使用md5
散列算法对MD5CryptoServiceProvider
类进行加密。首先添加以下命名空间:
using System.Text;
using System.Security.Cryptography;
其次,尝试这样的功能。
public static string Encrypt(string content)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] bytes = Encoding.ASCII.GetBytes(content);
bytes = md5.ComputeHash(data);
string result = Encoding.ASCII.GetString(bytes);
return result;
}
您在哪一行发生错误? – Tobbe
byte [] saltHashBytes = md5.ComputeHash(salt);''''byte [] passwordHashBytes = md5.ComputeHash(salt);' –