2015-09-11 48 views
0

我正在尝试创建登录系统。所有帐户在Mybb论坛系统上。我想使用mybb_users数据库登录到客户端。但密码MD5。并且有一个名字是冒号:“盐”。如何在检查密码时加密密码? 这是我的代码(如电子邮件地址和密码为真)C#客户机上的Php md5密码

int count = 0; 
      while (myReader.Read()) 
      { 
       count = count + 1; 

      } 
if (count == 1) // IF Ok. 
       { 
        userLabel.Text = myReader[0].ToString(); 
        loginSuccessTimer1.Enabled = true; 
        LoginFormSuccessBG loginSuccess = new LoginFormSuccessBG(); 
        loginSuccess.Show(); 
       } 

回答

2

当你的密码存储在一个MyBB的数据库,他们将遵循这种形式:

md5(password + md5(salt)) 

换句话说首先得到的MD5盐的散列,然后将其添加到密码,然后创建该密码的md5散列。生成的字符串将存储在MyBB数据库中。

我相信你想要做这样的事情:

string salt = // get salt from db 
string password = // 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 = System.BitConverter.ToString(passwordHashBytes); 
+0

哇,他们真的不支持更节省哈希算法?这种方案非常不安全,密码破解工具以每秒8 Giga哈希的速度支持它。 – martinstoeckli

+0

有一个快速搜索,似乎他们认为这是[不是一个关键的安全问题](http://community.mybb.com/thread-170294.html)。我不知道他们认为什么是关键性的,对我来说这是明显远离软件的一个理由。但无论如何,你的答案是好的。 – martinstoeckli

+0

纠正我,如果我错了......但虽然MD5不是最好的哈希算法,这个实现使用盐和两个MD5迭代。所以存在表/和或成功的反向散列的可能性并不大。 –