c # aynı sonucu verir php md5 algoritması

6 Cevap

C # bir karma algoritma var, kısaca, o:

string input = "asd";

System.Security.Cryptography.MD5 alg = System.Security.Cryptography.MD5.Create();
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();


byte[] hash = alg.ComputeHash(enc.GetBytes(input));
string output = Convert.ToBase64String(hash);

// outputs:   eBVpbsvxyW5olLd5RW0zDg==
Console.WriteLine(output);

Şimdi php bu davranışını çoğaltmak gerekir,

$input = "asd";
$output = HashSomething($input);
echo $output;

Bunu nasıl elde edebilirsiniz?

Ben kontrol

  • md5
  • utf8_decode
  • utf8_encode
  • base64_encode
  • base64_decode
  • url_decode

ama php md5 ne eksik ... ucunda == almaz kaydetti?

NOTE: zaten bu algoritma ile benim db uygulanan ve şifreleri kurtardı çünkü C # davranışlarını değiştiremezsiniz.

6 Cevap

Sorun varsayılan getiri C # sonra base64 kodlaması ile metin güvenli yapılmalıdır ham bayt çıktı iade edilir karma onaltılık varyasyon tarafından PHP'nin md5() fonksiyonudur. Eğer PHP5 çalıştırıyorsanız kullanabilirsiniz base64_encode(md5('asd', true)). md5() md5() ham bayt yerine altıgen dönmek kılan doğrudur için ikinci parametre dikkat edin.

Base64 php md5 karma kodlamak için hatırlıyor muydunuz?

$result = base64_encode(md5($password, true));

İkinci parametre md5 C # kullanarak konum fonksiyonları gibi aynı ham çıktı, dönüş yapar

C # kodu dizeden UTF8 bayt alır; kodlanmış base64 olarak md5 ve mağazalar hesaplar. Yani olması gereken, php aynı yapmanız gerekir:

$hashValue = base64_encode(md5(utf8_decode($inputString)))

Bu php için aşağıdaki gibi olmalıdır

 php -r "echo base64_encode(md5(utf8_encode('asd'),true));"

Ben sadece md5 ($ myvar) çalıştı kullanarak ... aynı sorun vardı. Ben aynı sonuç C # ve PHP alıyorum.

Gavin Kendall bana yardım gönderdi. Ben bu başkalarına yardımcı olur umarım.

http://jachman.wordpress.com/2006/06/06/md5-hash-keys-with-c/

public static string MD5Hash(string text)
{
    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    return System.Text.RegularExpressions.Regex.Replace(BitConverter.ToString(md5.ComputeHash(ASCIIEncoding.Default.GetBytes(text))), “-”, “”);
}