在可移植库.Net中的Sha256哈希

3

我需要计算一个字节数组的哈希值,用于可移植库。

我正在尝试找到一个与 System.Security.Cryptography.SHA256Managed 等效的算法,适用于我的可移植库,目标平台为 .NET 4.5 + win 8 + WP 8.0。

我试图使用 PclContrib,但是似乎无法将其安装到针对这些平台的库中。

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

谢谢


你可以使用BouncyCastle,似乎有它的PCL版本(不确定是否有官方的PCL版本)。或者你可以直接从BC中提取SHA-256并直接使用它。 - CodesInChaos
谢谢CodesInChaos,你能告诉我在这个库中哪里可以找到Sha256类来计算哈希值吗? - Cristian Dan
2个回答

8
您可以使用这个版本的Bouncy Castle。AArnott准备了一个PCL版本,虽然尚未被接受,但可能会对您有所帮助。 您还可以将一些Mono源代码直接集成到您的项目中。
一个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而不是管理的慢速且潜在不安全的实现。 支持的完整算法列表在此处

更新3: 基于Net Standard的类库现在应该是大多数用例的答案。 当涉及Xamarin开发时,PCLCrypto似乎仍然是最佳选择。


我刚刚花了一个小时的时间尝试在我的项目中导入单密码库,但是由于有太多的依赖关系,所以我无法找到 Bouncy Castel 库中任何有用的类。 - Cristian Dan
我编辑了我的评论,添加了一个弹跳城堡的示例。 - Cyprien Autexier
是的...它正在工作!!!谢谢。抱歉我不知道如何使用这个类...我不知道BlockUpdate用于加载字节数组。 - Cristian Dan
不用谢,这个库确实不太直观 :) - Cyprien Autexier

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

如果需要更多参考,请点击这里


这不是仅限于WinRT/metro吗? - CodesInChaos
不需要,它可以在Windows和Windows Phone上都运行。只需查看给定链接中的要求即可。 - Amit Bhatiya
谢谢您的快速回复,但不幸的是那是针对Windows Phone 8.1的,而我需要支持WP 8.0。 - Cristian Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接