我正在创建一个C# Winforms应用程序,它通过HTTPS将数据发送到服务器。
登录机制应该是这样的:
1.我将用户名发送到服务器,服务器返回rsa模数和rsa指数
1.我使用这些给定的参数加密密码,并将用户名+密码发送到服务器进行身份验证
我试过RSACryptoServiceProvider
类,但我找不到示例或上的任何内容,我们如何使用给定的模数和指数进行加密?。
我认为,如果不指定任何值,它将执行默认加密参数。
所以如果有人曾经这样做过,他们能给予我一些提示吗?谢谢
UPDATE:根据Carsten Konig先生的建议,我尝试使用RSAParameters和RSA.ImportParameters
执行此操作,但它返回一个“BAD DATA”错误,并伴有加密异常。我的代码如下所示。
我也试过RSA.FromXmlString(mykey)
;(其中mykey
包含一个带有模数和exp的xml字符串),但我也得到了一个带有加密异常的“BAD DATA”错误......有人知道吗?或者如果是微软的bug,有人能建议一些其他像样的库来轻松地做到这一点吗?
RSAParameters rsaparam = new RSAParameters();
rsaparam.Modulus = modbytes;
rsaparam.Exponent = expbytes;
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider() ;
RSA.ImportParameters(rsaparam);
byte[] encryptedData = RSA.Encrypt(dataToEncrypt, false)
4条答案
按热度按时间pb3skfrl1#
你可以使用RSACryptoServiceProvider.Encrypt方法来完成这个任务,你还需要使用RSACryptoServiceProvider.ImportParameters方法并传递给它一个RSAParameters结构(这是你设置指数、模数等的地方)。
请看一下RSAParameters链接中的文档-它很好地记录了您必须为哪个结构字段传递哪个参数-如果您了解算法,应该没有问题。
编辑:以下是直接来自MSDN-site的示例:
请注意,只有密钥/iv会被加密,而不是任意字节,这些字节的长度也很重要!
MSDN中描述了允许的长度,具体取决于操作系统!
nnt7mjpx2#
如果使用RSACRyptoServiceProvider.ToXmlString导出服务器发送的模数和指数,则需要使用Convert.FromBase64String。
rjzwgtxy3#
还有一个对我非常有用的提示:
在这条线上,
PublicKey也可以是一个直接的字节数组,您可以从X509证书的“公钥”字段(直接)获得。
13z8s7eq4#
我有代码,我正在加密指数和模数,但未能解密它这里是我的加密代码。任何人可以帮助解密吗?我已经尝试
var plaintext = csp.Decrypt(cipherText, false);
,但不工作