【发布时间】:2019-04-16 18:04:38
【问题描述】:
我想重新创建 MyBB 哈希过程,以便我可以使用它的数据库在 3rd 方应用程序(用 C# 编写)上对用户进行身份验证。
MyBB 用途:
md5(md5($salt).password)
我的问题是我在 C# 上得到的结果与 MyBB 得到的结果完全不同。
我在 C# 上做了什么:
public string HashPass(string password, string salt)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] saltHash =md5.ComputeHash(System.Text.Encoding.ASCII.GetBytes(salt));
string passwordAndSalt = password + System.Text.Encoding.ASCII.GetString(saltHash);
byte[] finalHash = md5.ComputeHash(System.Text.Encoding.ASCII.GetBytes(passwordAndSalt));
string final = System.Text.Encoding.ASCII.GetString(finalHash);
return final;
}
使用密码“Test123”和盐“0fYR6mEE”(从 MyBB db 收集)的函数得到的结果是:“??R?????s??”而实际结果应该类似于“VaHffsyzJeEa4dB3bbMWeUlJObAfN5I9rf1CuNRXCa6xPJTzXL”。
很可能我遗漏了一些明显的东西,对此感到抱歉。
【问题讨论】:
-
你怎么知道MyBB使用ASCII来获取数据并得到结果?
-
MD5是垃圾,不要使用它。查看其他算法,例如 bcrypt、scrypt 和/或 sha512crypt 以获取至少密码 -
@Çöđěxěŕ 该评论没有用,您是否阅读了问题? “我想重新创建 MyBB 散列过程,以便我可以使用它的数据库来验证用户”。不要假设 OP 可以使用他们想要的任何东西
-
@CamiloTerevinto 我同意说 OP 遇到的问题并没有什么用,那么这只是一个评论,而不是一个答案 :)
-
纯猜测和我见过的一些例子。 @CamiloTerevinto