便携式库.Net中的Sha256哈希

时间:2014-06-17 13:12:45

标签: .net windows-phone-8 windows-8 portable-class-library

我需要计算可移植库中字节数组的哈希值。

我试图为我的针对.NET 4.5 + win 8 + WP 8.0的可移植库找到一个等效的System.Security.Cryptography.SHA256Managed。

我尝试了PclContrib但似乎无法为面向这些平台的库安装它。

是否有任何提供哈希算法实现的库可以在可移植库的上下文中引用?

由于

2 个答案:

答案 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