рд╕реА # рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде PhpBB рдПрдХреАрдХрд░рдг

рдЫрд╡рд┐

рд╢реБрдн рд░рд╛рддреНрд░рд┐ рд╕рдЬреНрдЬрдиреЛрдВ рдФрд░ рджреЗрд╡рд┐рдпреЛрдВ!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЕрддреАрдд рдореЗрдВ рдордВрдЪ рд▓реЛрдХрдкреНрд░рд┐рдп рдереЗ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, phpBB рдордВрдЪ рд▓реЛрдХрдкреНрд░рд┐рдп рдереЗред рдЖрдЬ, рдореЗрд░реЗ рдХреБрдЫ рдкрдЫрддрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП, рд╡реЗ рд╕рд╛рдорд╛рдЬрд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рджреЗрддреЗ рд╣реИрдВред рдиреЗрдЯрд╡рд░реНрдХ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрд╕рд░реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдирд╣реАрдВ рдЧрдП рд╣реИрдВред

рдореЗрд░реА рдкреЛрд╕реНрдЯ рдЖрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧреА рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реА # рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде phpBB рдХреЛ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрдИ рд▓реЛрдЧ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╣реЛрдВрдЧреЗ ...

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдЬрд┐рд╕рдореЗрдВ \ functions.php рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди phpbb_check_hash , _hash_crypt_pStreet рдФрд░ _hash_encode64 рдвреВрдВрдвреЗрдВ ред рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ C # рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рд╡реЗ phpBB рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

using System.Security.Cryptography; using System.Text; 


рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреВрд╕рд░реА рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ C # рдореЗрдВ рдЕрдкрдирд╛рдП рдЧрдП рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рдирд╛рдо рдирд╣реАрдВ рдмрджрд▓реЗ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ phbBB рдХреЗ рд╕рдорд╛рди рд╣реА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред

  public bool phpbb_check_hash(string password, string hash) { var itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; if (hash.Length == 34) { return (_hash_crypt_private(password, hash, itoa64) == hash) ? true : false; } return (Md5(Encoding.UTF8.GetBytes(password)) == Encoding.UTF8.GetBytes(hash)) ? true : false; } 


  public string _hash_crypt_private(string password, string setting, string itoa64) { var output = "*"; if (setting.Substring(0, 3) != "$H$" && setting.Substring(0, 3) != "$P$") { return output; } var countLog2 = itoa64.IndexOf(setting[3]); if (countLog2 < 7 || countLog2 > 30) { return output; } var count = 1 << countLog2; var salt = setting.Substring(4, 8); if (salt.Length != 8) { return output; } var str = new byte[Encoding.UTF8.GetBytes(salt).Length + Encoding.UTF8.GetBytes(password).Length]; Array.Copy(Encoding.UTF8.GetBytes(salt), 0, str, 0, Encoding.UTF8.GetBytes(salt).Length); Array.Copy(Encoding.UTF8.GetBytes(password), 0, str, Encoding.UTF8.GetBytes(salt).Length, Encoding.UTF8.GetBytes(password).Length); var hash = Md5(str); do { str = new byte[hash.Length + Encoding.UTF8.GetBytes(password).Length]; Array.Copy(hash, 0, str, 0, hash.Length); Array.Copy(Encoding.UTF8.GetBytes(password), 0, str, hash.Length, Encoding.UTF8.GetBytes(password).Length); hash = Md5(str); } while (--count != 0); output = setting.Substring(0, 12); output += _hash_encode64(hash, 16, itoa64); return output; } 


  public string _hash_encode64(byte[] input, int count, string itoa64) { var output = ""; var i = 0; do { int value = input[i++]; output += itoa64[value & 0x3f]; if (i < count) { value |= input[i] << 8; } output += itoa64[(value >> 6) & 0x3f]; if (i++ >= count) { break; } if (i < count) { value |= input[i] << 16; } output += itoa64[(value >> 12) & 0x3f]; if (i++ >= count) { break; } output += itoa64[(value >> 18) & 0x3f]; } while (i < count); return output; } 


  public byte[] Md5(byte[] str) { var md5CryptoServiceProvider = new MD5CryptoServiceProvider(); return md5CryptoServiceProvider.ComputeHash(str); } 


рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдордп рдореЗрдВ рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдордВрдЪреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдлрд╡рд╛рд╣ рдЙрдбрд╝рд╛рдИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЗрд╕реАрд▓рд┐рдП рдореИрдВрдиреЗ рдЬрдирддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/In189240/


All Articles