Xamarin.forms 如何实现Xamarin.Android对RSA密钥的非对称加密?
下面是我已经实现的代码。这里是错误。我必须导入任何nuget吗?帮助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
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的代码