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

How do you hash a string in a PCL project?

我们试过使用这个库: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();
}

但是图书馆好像没有。

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

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

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;
         }
    }  
}

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