Przepisuję stronę PHP w ASP.NET MVC. Chciałbym utrzymać tę samą bazę użytkowników, ale hasła są mieszane za pomocą funkcji PHP crypt(). Potrzebuję tej samej funkcji w .Net, aby móc zaszyfrować hasło przy logowaniu i sprawdzić je w odniesieniu do hashowanego hasła w bazie danych użytkowników.Funkcja PHP crypt() w .Net?
krypta w tym przypadku używa realizację CRYPT_MD5 - mieszań wszystko zacząć od 1 $ $
Próbowałem Phalanger ale nie ma implementację MD5 funkcji krypt.
Czy ktoś wie o jednym z .Net? Przykład C# crypt() na CodeProject używa DES, a nie MD5.
Próbowałem następujący kod w C#, z różnymi permutacjami soli + hasło, hasło + sól i sól zi bez prefiksu $ 1 $ i sufiksu $. Żaden daje taki sam wynik jak PHP:
static void Main(string[] args)
{
const string salt = "somesalt";
const string password = "fubar";
const string plaintextString = password + salt;
byte[] plaintext = GetBytes(plaintextString);
var md5 = MD5.Create("MD5");
byte[] hash = md5.ComputeHash(plaintext);
string s = System.Convert.ToBase64String(hash);
Console.WriteLine("Hash of " + password + " is " + s);
Console.ReadKey();
}
private static byte[] GetBytes(string s)
{
var result = new byte[s.Length];
for (int i = 0; i < s.Length; i++)
result[i] = (byte)s[i];
return result;
}
MD5 nie jest uważane za bezpieczne hash a może chcesz uaktualnić swoje systemy SHA-256. – TravisO
btw, 'Konsola.WriteLine ("Hash z {0} to {1}", hasło, s); ' – abatishchev
Abatishchev, to był szybki skok, aby sprawdzić, czy mogę wygenerować ten sam skrót jak PHP dla danego ciągu wejściowego. Twój komentarz jest całkowicie nie na temat i jest mniej niż pomocny. –