. Net PHP crypt () fonksiyonu?

5 Cevap php

ASP.NET MVC bir PHP web sitesi yeniden yazıyorum. Ben aynı kullanıcı tabanını korumak istiyorum ama şifreleri PHP crypt () fonksiyonu kullanılarak karma vardır. Ben giriş bir şifre karma ve kullanıcı veritabanı karma parola karşı kontrol edebilirsiniz böylece ben. Net aynı işlevi gerekir.

Bu durumda crypt CRYPT_MD5 uygulamasını kullanıyor - sağlamalarının tüm $ 1 $ ile başlar

Ben Phalanger denedim ama crypt fonksiyonunun bir MD5 uygulaması yoktur.

Herkes. Net biri biliyor mu? CodeProject ilgili crypt () C # örnek DES, değil MD5 kullanır.

Ben tuz + şifre, parola + ile tuz ve tuz farklı permütasyon ve $ 1 $ $ önek ve sonek olmadan, C # aşağıdaki kodu denedim. Yok PHP aynı sonucu verir:

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;
}

5 Cevap

Ben buldum tek çözüm sadece giriş dizesi bir karma gerçekleştiren ve :-( döndürür önemsiz bir PHP komut dosyası aramak oldu

Bir kaç vardır. Md5 karma NET yöntemleri, System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, format), bir lokma olsa bile, kullanımı en kolay. Sadece biçimi olarak aracılığıyla "md5" geçmektedir.

PHP bu yaptığını nasıl bağlı, bunu alırken karma başında kapalı $1$ doğrama gibi basit olabilir. Bu daha karmaşık olabilir. Eğer bir örnek şifre / karma sonrası eğer ben sizin için bu parola aynı karma üretir bazı C # ile gelip eğer, ben görürsünüz.

Eğer. NET bir göz almış MD5 class? $ 1 $ 12 karakter tuz parçasıdır.

Bu en azından, vaat ediyor.

unix md5crypt CRYPT_MD5 $1$ tuzları için.

(A C# implementation of Unix crypt() DES)

Şu anda tam olarak aynı konu üzerinde çalışıyorum. Ben ile geldi çözüm extern çağrı yoluyla doğrudan php işlevini çağırmak oldu:

[DllImport( "php5ts.dll", EntryPoint = "crypt", CharSet = CharSet.Ansi )]
private static extern string crypt( string str, string salt );

Yerel WebDev sunucu, IIS5 ve ııs6 çalışırken bu php sürümü 5.2.10 için iyi çalışır ancak II7 kullanırsanız ASP.Net alt işlem istisnası çöküyor. (Ben en kısa sürede bir çözüm bulmak olarak benim cevap güncellenir)

Biz de onların ayrıntılarını güncellemek gibi tüm yeni kullanıcılar için. Net MD5 uygulama kullanmak ve sorunsuz mevcut kullanıcıları üzerinde dönüştürmek için izin vermek için bir parola tipi bayrak dahil.

Update: IIS7 doğrudan php5ts.dllı referans ile sorun büyük olasılıkla aşağı 64 bit windows kullanıyorum gibi görünüyor, bu yüzden bu çözüm bir 32 bit Windows 7 veya Server 2008 yüklemesinde işe yarayabilir, ancak ben kuramıyorum Bunu doğrulamak. Bizim mevcut sitesi DES kullanan çıktı gibi biz, CodeProject gelen referans Mike için teşekkürler crypt uygulama kullanmak mümkün.