如何在 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)。
我们试过使用这个库: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)。