在Xamarin共享项目

时间:2017-03-30 10:47:17

标签: c# encryption xamarin xamarin.forms pcl-crypto

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

对此有何想法?如果有人可以指出我的PCLCrypto的相当于我需要的文件,那也没关系,我只需要对这个问题有所了解并做一些澄清,因为我已经阅读了其他一些问题,但是没有#t; t真的是一个共识。

2 个答案:

答案 0 :(得分:0)

因为用于加密的Nuget包不是PCL友好的,所以您可能希望使用Xamarin.Forms DependencyService。您可以本机实现这些Crypto方法,只需通过DependencyService调用实际的实现。

  1. 在PCL中创建一个界面(例如ICrypto)。

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

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

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

  5. 通过DependencyService从您的PCL调用此代码。语法如下:

  6. bool valid = DependencyService.Get< ICrypto>()。PasswordValid(密码);

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

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

答案 1 :(得分:-1)

我不知道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

也许这个链接可以帮助你在Xamarin.Forms项目上加密(Using Cryptography in Portable Xamarin Forms (Windows Phone, Android and IOS)