如何在PCL项目中散列字符串?

时间:2015-01-06 02:19:09

标签: xamarin

我们已尝试使用此库:http://msdn.microsoft.com/en-us/library/system.security.cryptography.hashalgorithm(v=vs.110).aspx

这段代码:

public static byte[] GetHash(string inputString)
{
    HashAlgorithm algorithm = SHA1.Create();  // SHA1.Create()
    return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
}

public static string GetHashString(string inputString)
{
    StringBuilder sb = new StringBuilder();
    foreach (byte b in GetHash(inputString))
        sb.Append(b.ToString("X2"));

    return sb.ToString();
}

但图书馆似乎没有。

1 个答案:

答案 0 :(得分:2)

如果PCL中没有某些API,您通常会在构造函数中创建一个接口并将其注入。

在你的例子中,它会是这样的

PCL图书馆项目

public interface IHashService 
{
     byte[] ComputeHash(byte[] data)
}

特定于平台的项目

public class Sha1HashService : IHashService 
{
    public ComputeHash(byte[] data) 
    {
         using(var algorithm = SHA1.Create())
         {
              var result = algorithm.ComputeHash(data);
              return result;
         }
    }  
}

最好不要使用静态方法并尽可能使用依赖注入。 您也可能希望您的接口更通用(将字节作为参数)而不是字符串,原因完全相同(依赖于Encoding.UTF8.GetBytes)。