无法在RSA Cryptoservice提供程序类中使用现有密钥

时间:2014-08-21 19:49:44

标签: c# windows-phone-8 rsa

我需要在我的wp8应用程序中使用RSA加密并将其发送到服务器。但我面临的问题是我知道服务器的公钥,我需要使用密钥加密应用程序端的数据。但到目前为止,我从这里的所有帖子推断,RSACryptoservice提供程序类不支持来自其他来源的密钥(我错了吗?)。在这种情况下有没有办法使用该类?或者这可以通过仅使用第三方库来完成?

我尝试了以下功能,但仍无用。我在这里做错了什么?

public static string RSAEncrypt(string data)
{
    try
    {       
        //initialze the byte arrays to the public key information. 
        string  pk = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD0cNKUgLdLMpW5BWB+PAlIIIiqhSXk66PQVemUnRs3nowRcBETfUkMIfDcPDM1FXhh+/2FqsnFLveCYl980bylZlBghkjUleknV4dGLfQPuLE7oxk4tbQF6Zk9Fmc9ynxvZ7XDuLmdn/4mdxW7BmcSomLIxkkGHynKkkXk5QcKQIDAQAB";

        byte[] PublicKey = Convert.FromBase64String(pk);
        //byte[] Exponent = { 1, 0, 1 }; 

        UnicodeEncoding pi = new UnicodeEncoding();

        //Values to store encrypted symmetric keys. 
        byte[] dataBytes = pi.GetBytes(data);

        //Create a new instance of RSACryptoServiceProvider.
        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

        //Create a new instance of RSAParameters.
        RSAParameters RSAKeyInfow = new RSAParameters();

        //Set RSAKeyInfo to the public key values. 
        RSAKeyInfow.Modulus = PublicKey;
        // RSAKeyInfow.Exponent = Exponent;

        //Import key parameters into RSA.
        RSA.ImportParameters(RSAKeyInfow);

        var rslt = RSA.Encrypt(dataBytes, false);
        System.Diagnostics.Debug.WriteLine(rslt);

        return Convert.ToBase64String(rslt);
    }
    catch
    {
        return null;
    }
}

我在另一个页面中调用此函数:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var myString = "this is my string data";

    var x = Class1.RSAEncrypt(myString);
    MessageBox.Show(x);
}

我得到的错误是“值不能为空。 参数名称:messageBoxText“

我认为这里的问题不是传递指数,但我不知道如何。

0 个答案:

没有答案