在 Xamarin 共享项目中使用加密的正确方法

Correct way to use encryption in Xamarin shared project

我目前正在开发一个 Xamarin Forms 项目,我需要使用一些通常可通过命名空间 System.Security.Cryptography 获得的加密方法,即 RSACryptoServiceProvider。到目前为止,我一直在使用 PCLCrypto nuget 包来使用其他方法,例如 MD5 哈希,但我还没有弄清楚如何具体使用 RSA。我还想知道是否直接在每个本机项目上实现这些方法然后在共享项目上使用它们而不是使用 nuget 会更好。

对此有什么想法吗?如果有人可以指出我需要的 PCLCrypto 的一些文档,这也很好,我只需要一些关于这个问题的说明和一些澄清,因为我已经阅读了一些其他问题,但并没有真正达成共识。

我不知道您是否对 AES 感兴趣,但也许您可以看看这个示例。

byte[] keyMaterial;
byte[] data;
var provider = WinRTCrypto.SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithm.AesCbcPkcs7);
var key = provider.CreateSymmetricKey(keyMaterial);

// The IV may be null, but supplying a random IV increases security.
// The IV is not a secret like the key is.
// You can transmit the IV (w/o encryption) alongside the ciphertext.
var iv = WinRTCrypto.CryptographicBuffer.GenerateRandom(provider.BlockLength);

byte[] cipherText = WinRTCrypto.CryptographicEngine.Encrypt(key, data, iv);

// When decrypting, use the same IV that was passed to encrypt.
byte[] plainText = WinRTCrypto.CryptographicEngine.Decrypt(key, cipherText, iv);

Source: PCLCrypto Github

也许这个 link 可以帮助您在 Xamarin.Forms 项目 (Using Cryptography in Portable Xamarin Forms (Windows Phone, Android and IOS))

上进行加密

因为密码学的 Nuget 包不是 PCL 友好的,你可能想要利用 Xamarin.Forms DependencyService。您可以本机实现这些 Crypto 方法,只需通过 DependencyService 调用实际实现即可。

  1. 在您的 PCL 中创建一个接口(例如 ICrypto)。

  2. 在该接口中创建一个方法,例如验证密码(例如 bool PasswordValid)。

  3. 将 System.Security.Cryptography 的 Nuget 包添加到您的本机项目。

  4. 在您的本机代码中创建一个 class 来实现该接口(例如 Crypto_Android)并实现该方法(例如 bool PasswordValid)

  5. 通过 DependencyService 从您的 PCL 调用此代码。语法是这样的:

bool valid = DependencyService.Get().PasswordValid(密码);

注意:对于实际密码学的代码,您可以查看上面由 Tifa 提供的 PCLCrypto Github link。

可以找到一个简单的 DependencyService 示例 here