Tengo una función que genera un hash MD5 en C# como esto:¿Cómo se puede generar el mismo MD5 Hashcode en C# y Java?
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(data);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
sb.Append(result[i].ToString("X2"));
}
return sb.ToString();
en Java mi función es similar a esto:
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(bytes,0,bytes.length);
String hashcode = new BigInteger(1,m.digest()).toString(16);
return hashcode;
Mientras que el código C# genera: "02945C9171FBFEF0296D22B0607D522D" los códigos de Java genera: "5a700e63fa29a8eae77ebe0443d59239".
¿Hay alguna manera de generar el mismo hash md5 para el mismo bytearray?
En la demanda:
Este es el testcode en Java:
File file = new File(System.getProperty("user.dir") + "/HashCodeTest.flv");
byte[] bytes = null;
try {
bytes = FileUtils.getBytesFromFile(file);
} catch (IOException e) {
fail();
}
try {
generatedHashCode = HashCode.generate(bytes);
} catch (NoSuchAlgorithmException e) {
fail();
}
y esto es mi código en C#
var blob = GetBlobByHttpPostedFile(httpPostedFile);
var hashCode = Md5Factory.ConvertByteArray(blob);
private static byte[] GetBlobByHttpPostedFile(HttpPostedFile httpPostedFile)
{
var contentLength = httpPostedFile.ContentLength;
var result = new byte[contentLength];
var inputStream = httpPostedFile.InputStream;
inputStream.Read(result, 0, contentLength);
return result;
}
Saludos
Ha publicado el código * de prueba * pero no * datos * de prueba. No cargue desde un archivo o HTTP, solo codifique algunos datos (cualquier dato) en su prueba. –
En particular, acabo de editar mi respuesta con ejemplos de lo que estoy buscando, y aquellos * do * muestran el mismo hash, con un código que es efectivamente el mismo que el suyo. Tenga en cuenta que en su código C# está ignorando el resultado de 'Stream.Read', que nunca es una buena idea ... –