Xamarin.forms 如何实现Xamarin.Android对RSA密钥的非对称加密?

Xamarin.forms 如何实现Xamarin.Android对RSA密钥的非对称加密?,xamarin.forms,xamarin.android,java,c#,Xamarin.forms,Xamarin.android,Java,C#,下面是我已经实现的代码。这里是错误。我必须导入任何nuget吗?帮助 public string EncryptRSA(string plainText, string publicKeyString) { byte[] cipherText = null; String strEncryInfoData = ""; try { KeyFactory

下面是我已经实现的代码。这里是错误。我必须导入任何nuget吗?帮助

public string EncryptRSA(string plainText, string publicKeyString)
        {
            byte[] cipherText = null;
            String strEncryInfoData = "";
            try
            {

                KeyFactory keyFac = KeyFactory.getInstance("RSA");
                KeySpec keySpec = new X509EncodedKeySpec(Base64.decode(publicKeyString.trim().getBytes(), Base64.DEFAULT));
                Key publicKey = keyFac.generatePublic(keySpec);

                // get an RSA cipher object and print the provider
                final Cipher cipher = Cipher.getInstance("RSA");
                // encrypt the plain text using the public key
                cipher.init(Cipher.ENCRYPT_MODE, publicKey);
                cipherText = cipher.doFinal(text.getBytes());
                strEncryInfoData = new String(Base64.encode(cipherText, Base64.DEFAULT));

            }
            catch (Exception e)
            {
            }
            return strEncryInfoData.replaceAll("(\\r|\\n)", "");
        }
但是,您的代码在Xamarin中使用

请用C的方式做RSA加密

如果你不介意,就用我的吧

public class RSA {
    public RSA() => Provider = new RSACryptoServiceProvider(2048);
    public RSA(string key) {
        Provider = new RSACryptoServiceProvider(2048);
        Provider.FromXmlString(Encoding.UTF8.GetString(Convert.FromBase64String(key)));
    }
    public RSACryptoServiceProvider Provider;
    public string PublicKey() => Convert.ToBase64String(Encoding.UTF8.GetBytes(Provider.ToXmlString(false)));
    public string PrivateKey() => Convert.ToBase64String(Encoding.UTF8.GetBytes(Provider.ToXmlString(true)));
    public string Encrypt(string meta) => Convert.ToBase64String(Provider.Encrypt(Encoding.UTF8.GetBytes(meta), RSAEncryptionPadding.Pkcs1));
    public string Decrypt(string meta) => Encoding.UTF8.GetString(Provider.Decrypt(Convert.FromBase64String(meta), RSAEncryptionPadding.Pkcs1));
}
用法:

var rsa = new RSA();
var generatePrivateKey = rsa.PrivateKey();
var generatePublicKey = rsa.PublicKey();
var encryted = new RSA(yourKey).Encrypt(yourText);
var decrypted = new RSA(yourKey).Decrypt(yourText);

注意,该类默认使用2048位和Pkcs1填充,您可以根据自己的口味进行更改。

请不要将代码作为图像发布,而是作为问题中的文本发布。代码作为文本发布。感谢you@SampathR,我发现了一篇关于非对称加密的文章,您可以看看:var encryted=new RSArsaKey.EncryptvEncryptedStr;此调用使用您的代码给了我异常。我有UWP的代码,它工作得很好。我想要Xamarin.Android的代码