2011-11-28 7 views
21

Estoy creando una aplicación MetroStyle y quiero generar un código MD5 para mi cadena. Hasta ahora he utilizado este:¿Cómo generar código hash MD5 para mi aplicación WinRT usando C#?

public static string ComputeMD5(string str) 
    { 
     try 
     { 
      var alg = HashAlgorithmProvider.OpenAlgorithm("MD5"); 
      IBuffer buff = CryptographicBuffer.ConvertStringToBinary(str, BinaryStringEncoding.Utf8); 
      var hashed = alg.HashData(buff); 
      var res = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, hashed); 
      return res; 
     } 
     catch (Exception ex) 
     { 
      return null; 
     } 
    } 

pero se produce una excepción de tipo System.ArgumentOutOfRangeException con el mensaje de error siguiente:

No mapping for the Unicode character exists in the target multi-byte code page. (Exception from HRESULT: 0x80070459)

¿Qué estoy haciendo mal aquí?

+1

¿Qué línea arroja la excepción? –

+0

La línea antes de 'return res;' Quiero decir 'var res = ...' –

Respuesta

37

OK. He encontrado cómo hacer esto. Aquí está el código final:

public static string ComputeMD5(string str) 
    { 
     var alg = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5); 
     IBuffer buff = CryptographicBuffer.ConvertStringToBinary(str, BinaryStringEncoding.Utf8); 
     var hashed = alg.HashData(buff); 
     var res = CryptographicBuffer.EncodeToHexString(hashed); 
     return res; 
    } 
+1

Es posible que desee explicar lo que ha cambiado y por qué. – BoltClock

+2

Bueno, en lugar de usar la función 'ConvertBinaryToString' para convertir la matriz binaria hash, debería haber usado la función' EncodeToHexString' para convertir la matriz a la cadena * Hex *. Eso es lo único que cambié. –

+0

@AlirezaNoori No obtuvo la referencia para HashAlgorithmProvider – user1006544

Cuestiones relacionadas