我目前正在开发Xamarin Forms项目,我需要使用一些通常可通过命名空间System.Security.Cryptography获得的加密方法,即 RSACryptoServiceProvider 。到目前为止,我一直在使用PCLCrypto nuget包来使用其他方法,例如MD5哈希,但我还没有弄清楚如何专门使用RSA。我还想知道是否更好地直接在每个本机Project上实现这些方法,然后在共享的方法上使用它们而不是使用nuget。
对此有何想法?如果有人可以指出我的PCLCrypto的相当于我需要的文件,那也没关系,我只需要对这个问题有所了解并做一些澄清,因为我已经阅读了其他一些问题,但是没有#t; t真的是一个共识。
答案 0 :(得分:0)
因为用于加密的Nuget包不是PCL友好的,所以您可能希望使用Xamarin.Forms DependencyService。您可以本机实现这些Crypto方法,只需通过DependencyService调用实际的实现。
在PCL中创建一个界面(例如ICrypto)。
在该界面中创建一个方法,例如,验证密码(例如bool PasswordValid)。
将System.Security.Cryptography的Nuget包添加到本机项目中。
在您的本机代码中创建一个将实现该接口的类(例如Crypto_Android)并具有该方法的实现(例如bool PasswordValid)
通过DependencyService从您的PCL调用此代码。语法如下:
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);
也许这个链接可以帮助你在Xamarin.Forms项目上加密(Using Cryptography in Portable Xamarin Forms (Windows Phone, Android and IOS))