myBB密码c#客户端



我正在一个加载器/客户端工作,我的论坛用户将使用他们的myBB信息登录到我的应用程序。我知道在应用程序中使用数据库连接并不好。但是我也要将它们的id存储在数据库中,所以我需要连接到它。

但是,它们像这样存储密码:

$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);

但是我得到以下错误:

无法从'string'转换为'System.IO.Stream'

ComputeHash想要一个IO.StreamByte[]作为输入,并且正如错误指定的那样,不能从您的字符串隐式地转换为IO.Stream

下面是一个如何将字符串转换为流的例子(从这个答案中偷来的):

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);

您使用MD5CryptoServiceProvider类使用md5哈希算法进行加密。首先添加以下名称空间:

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;
}

最新更新