Насколько я могу судить по чтению кода Java здесь и здесь , разница в том, что он выполняет несколько итераций алгоритма MD5.
Принимая этот ответ и изменив его, я достиг этого:
public static string CreateMD5(string input, string salt = null, int iterations = 1)
{
// Use input string to calculate MD5 hash
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
// modification from linked answer: prefix with salt
if (!string.IsNullOrEmpty(salt) != null)
{
inputBytes = System.Text.Encoding.ASCII.GetBytes(salt).Concat(inputBytes).ToArray();
}
byte[] hashBytes = md5.ComputeHash(inputBytes);
// modification from linked answer: iterate N times
for (int i = 1; i < iterations; ++i)
{
hashBytes = md5.ComputeHash(hashBytes);
}
// Convert the byte array to hexadecimal string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
public static string enPwd(string username, string pwd)
{
return CreateMD5(username + pwd, username, 2);
}
Как видите, вам просто нужно хэшировать полученный хеш.
У меня естьреплицировал то, что я видел в библиотеке Java здесь , и код C # выдает тот же результат здесь .