MD5 w Java i C#

Imagem de capa

Nacięliśmy się ostatnio na hash’owanie w MD5.

Bywa, ja miałem swoje hashe, kolega z javy miał swoje. Dla grupy testowej hash’e były identyczne. Okazało się, że grupa testowa hash’y była niewystarczająca.

Hash’e wygenerowane w C# miały na początku zera, a w javie zera były ucinane.

Z czystej ciekawości - zainstalowałem eclipse i udało mi się uruchomić kawałek kodu w javie który działa odrobinę lepiej - dzięki pętli while która czuwa nad długością naszego hash’a :smile:

Java:

private static String javaMD5(String text) 
{ 
  byte[] bytes = text.getBytes(); 
  MessageDigest m = null; 
  try
  { 
    m = MessageDigest.getInstance("MD5"); 
  } catch (NoSuchAlgorithmException var5) 
  { 
    var5.printStackTrace(); 
  } 
  
  byte[] digest = m.digest(bytes); 
  String hash = (new BigInteger(1, digest)).toString(16); 
  
  while(hash.length() < 32 )
  { 
    hash = "0"+hash; 
  } 
  
  return hash; 
}

oraz C#:

private static string CsharpToMd5(string text) 
{ 
  var bytes = new MD5CryptoServiceProvider()
                    .ComputeHash(Encoding.UTF8.GetBytes(text)); 
  var stringBuilder = new StringBuilder(); 
  
  foreach (var @byte in bytes) 
  { 
    stringBuilder.Append(@byte.ToString("x2")); 
  } 
  
  return stringBuilder.ToString(); 
}

Przykładowe słowo do zahashowania to “ test” jego hash to: “ 098f6bcd4621d373cade4e832627b4f6”.