我需要计算可移植库中字节数组的哈希值。
我试图为我的针对.NET 4.5 + win 8 + WP 8.0的可移植库找到一个等效的System.Security.Cryptography.SHA256Managed。
我尝试了PclContrib但似乎无法为面向这些平台的库安装它。
是否有任何提供哈希算法实现的库可以在可移植库的上下文中引用?
由于
答案 0 :(得分:8)
您可以使用Bouncy Castle的此端口。 AArnott准备了PCL Version,但尚未被接受但可能对您有所帮助。 您还可以将一些mono source code直接集成到您的。{/ p>
Bouncy Castle样本:
var data = System.Text.Encoding.UTF8.GetBytes("test");
Org.BouncyCastle.Crypto.Digests.Sha256Digest hash = new Org.BouncyCastle.Crypto.Digests.Sha256Digest();
hash.BlockUpdate(data, 0,data.Length);
byte[] result = new byte[hash.GetDigestSize()];
hash.DoFinal(result, 0);
<强>更新强> 我没有维护我的原始端口,我强烈建议在GitHub上使用一个可用的端口,例如:https://github.com/onovotny/BouncyCastle-PCL。它也支持更多平台。
更新2: 截至今天,我宁愿推荐使用PCLCrypto。这个库由AArnott维护(他最初帮助我使用Bouncy castle PCL支持)。这个库的主要优点是,感谢nuget诱饵和切换,它将使用原生加密 API ,而不是管理缓慢和潜在不安全的实现。完整的支持算法列表here。
更新3: 基于Net Standard的类库现在应该是大多数用例的答案。在Xamarin开发方面,PCLCrypto似乎仍然是最好的。
答案 1 :(得分:1)
也许您正在寻找HashAlgorithmProvider
这对你有用吗?
private void HandleHashClick(object sender, RoutedEventArgs e)
{
// get the text...
var inputText = this.textInput.Text;
// put the string in a buffer, UTF-8 encoded...
IBuffer input = CryptographicBuffer.ConvertStringToBinary(inputText,
BinaryStringEncoding.Utf8);
// hash it...
var hasher = HashAlgorithmProvider.OpenAlgorithm("SHA256");
IBuffer hashed = hasher.HashData(input);
// format it...
this.textBase64.Text = CryptographicBuffer.EncodeToBase64String(hashed);
this.textHex.Text = CryptographicBuffer.EncodeToHexString(hashed);
}
更多参考,你可以去here