在没有 System.Security.Cryptography 的情况下计算 SHA256 哈希

Calculate SHA256 hash WITHOUT System.Security.Cryptography

我正在将我的一个库移动到 Xamarin PLC。

官方文档说支持System.Security.Cryptography命名空间,但在实际代码中并没有。

我正在寻找一种在没有此命名空间的情况下计算 SHA256 哈希的方法(并且在 Windows 命名空间中没有 HashAlgorithmProvider。此方法会破坏 Android 和 WP8.0 的应用程序)

使用 Bouncy Castle PCL lib (https://www.nuget.org/packages/Portable.BouncyCastle/)

测试类似的东西
var encData = Encoding.UTF8.GetBytes("TESTHASH");
Org.BouncyCastle.Crypto.Digests.Sha256Digest myHash = new Org.BouncyCastle.Crypto.Digests.Sha256Digest();
myHash.BlockUpdate (encData, 0, encData.Length);
byte[] compArr = new byte[myHash.GetDigestSize ()];
myHash.DoFinal (compArr, 0);

Xamarin 文档是正确的,完全支持命名空间。

您无法使用它,仅仅是因为您正在编写一个 PCL 库,而 Microsoft(好吧,您会感到惊讶)认为它不应该如此。

您要么使用另一个答案中的解决方法,由于 Bouncy Castle 是完全托管的并且没有获得任何硬件提升,因此性能损失很大,或者完全放弃 PCL 方法。

Microsoft 即将推出 .NET Core 和 .NET Platform Standard/.NET Standard Library,它允许您的库以 .NET Platform 标准为目标,然后大多数 PCL 问题都会消失。关注它,你会喜欢的。