Здесь есть неизвестные.Какую кодировку использует MyBB для байтов пароля?Это может быть ASCII, ANSI или UTF8, или он может получить строковые байты напрямую, т. Е. Без кодирования.Поэтому я напишу его частично как псевдокод
byte[] passwordBytes = GetBytes(password); // Where you have to define GetBytes
byte[] saltBytes = System.Convert.FromBase64String(salt); // Assuming it is given as base64
// Merge the password bytes and the salt bytes
var mergedBytes = new byte[passwordBytes.Length + saltBytes.Length];
Array.Copy(passwordBytes, mergedBytes, passwordBytes.Length);
Array.Copy(saltBytes, 0, mergedBytes, passwordBytes.Length, saltBytes.Length);
var md5 = new MD5CryptoServiceProvider();
byte[] finalHash = md5.ComputeHash(mergedBytes);
string final = System.Convert.ToBase64String(finalHash);
Обратите внимание, что я объединяю байты пароля и солт-байты, а не строку пароля и солт-строку.Затем MD5 он взял только один раз из этих объединенных байтов.
Но я не уверен, что делает md5(md5($salt).password)
.md5()
уже возвращает хэш в виде строки base64?Возможно, вам придется преобразовать соль из base64 в bytes[]
, затем получить хеш MD%, преобразовать его в строку base64 и затем объединить со строкой пароля.Затем получите байты из этой объединенной строки, снова выполните хеширование и снова преобразуйте результат в строку base64.
Чтобы быть уверенным, вам придется копать глубже в исходный код MyBB.