C# 提供模和指数的RSA加密

C# 提供模和指数的RSA加密,c#,winforms,encryption,rsa,C#,Winforms,Encryption,Rsa,我正在创建一个C#Winforms应用程序,它通过HTTPS将数据发布到服务器 登录机制应该是这样的: 我将用户名发送到服务器,服务器用rsa模数和rsa指数进行响应 我使用这些给定参数加密密码,并将username+password发送到服务器进行身份验证 我尝试了RSACryptoServiceProvider类,但找不到示例或如何使用给定的模和指数进行加密?上的任何内容 我认为在不指定任何值的情况下,它会执行默认的加密参数 所以,如果有人曾经这样做过,他们能给我一些提示吗?谢谢 更新:根据

我正在创建一个C#Winforms应用程序,它通过HTTPS将数据发布到服务器

登录机制应该是这样的:

  • 我将用户名发送到服务器,服务器用rsa模数和rsa指数进行响应

  • 我使用这些给定参数加密密码,并将username+password发送到服务器进行身份验证

  • 我尝试了
    RSACryptoServiceProvider
    类,但找不到示例或如何使用给定的模和指数进行加密?上的任何内容

    我认为在不指定任何值的情况下,它会执行默认的加密参数

    所以,如果有人曾经这样做过,他们能给我一些提示吗?谢谢

    更新:根据卡斯滕·科尼格先生的建议。我曾尝试使用rsapameters和
    RSA.ImportParameters
    执行此操作,但它返回一个带有加密异常的“坏数据”错误。我的代码如下

    我还尝试了RSA.FromXmlString(mykey);(其中
    mykey
    包含一个带模数和exp的xml字符串),但我也得到了一个带有加密异常的“坏数据”错误。。。有人知道吗?或者,如果这是微软的错误,有人能建议其他合适的库来轻松地做到这一点吗

    RSAParameters rsaparam = new RSAParameters(); 
    rsaparam.Modulus = modbytes; 
    rsaparam.Exponent = expbytes; 
    RSACryptoServiceProvider RSA = new RSACryptoServiceProvider() ; 
    RSA.ImportParameters(rsaparam); 
    byte[] encryptedData = RSA.Encrypt(dataToEncrypt, false)
    

    您可以通过使用该方法来实现这一点。您还需要使用该方法并向其传递一个结构(这是您设置指数、模数等的地方)

    请看一看RSA参数链接中的文档,它很好地记录了对于什么结构字段必须传递什么参数,如果您现在使用该算法,应该不会有问题

    编辑:以下是直接来自以下内容的示例:

    请注意,只有key/iv被加密-而不是任意字节-这些字节的长度也很重要


    MSDN中描述了允许的长度,具体取决于操作系统

    另外一个对我非常有用的提示:

    在这方面,

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

    公钥也可以是一个直接、直接的字节数组,可以从X509证书的“公钥”字段(直接)获取。

    如果使用rsacryptServiceProvider.ToXmlString导出服务器发送的模数和指数,则需要使用Convert.FromBase64String

        public RSAParameters SetPublicKey(string modulus, string exponent)
        {
            RSAParameters result = new RSAParameters();
            result.Modulus = Convert.FromBase64String(modulus);
            result.Exponent = Convert.FromBase64String(exponent);
    
            return result;
        }
    

    嗨,卡斯滕·科尼格,谢谢你的回复。。我已经尝试过了,但它返回了一个带有加密异常的“坏数据”错误。。知道我做错了什么吗?我在下面添加了代码`rsapameters rsaparm=new rsapameters();rsparam.modules=modbytes;rsparam.Exponent=expbytes;RSACryptoServiceProvider RSA=新的RSACryptoServiceProvider();RSA.输入参数(rsaparam);字节[]encryptedData=RSA.Encrypt(dataToEncrypt,false);'我还尝试了RSA.FromXmlString(mykey);(其中mykey包含一个带模数和exp的xml字符串),但在这其中,我也得到了一个带有加密异常的“坏数据”错误。。。有人知道吗?或者,如果是微软的一些bug,有人能推荐其他合适的库来轻松地做到这一点吗?很难说——内部异常中有什么东西吗?也许你把钥匙的长度弄错了。。。想一想-你知道要加密的数据长度必须有一定的长度吗?嗨,卡斯滕·科尼格先生,没有内部异常。。我有点放弃了。。看起来以前没人试过这个。谢谢你的提示和帮助。不,我以前也做过类似的事情——你检查过要加密的块的长度了吗?
        public RSAParameters SetPublicKey(string modulus, string exponent)
        {
            RSAParameters result = new RSAParameters();
            result.Modulus = Convert.FromBase64String(modulus);
            result.Exponent = Convert.FromBase64String(exponent);
    
            return result;
        }