我正在尝试使用公钥加密来与客户端和服务器进行通信。服务器应该生成1024位公钥并将其发送到客户端,客户端将使用该密钥将加密数据发送回服务器。到目前为止,我已经用下面的代码初始化了RSACryptoServiceProvider:
RSACryptoServiceProvider rsaEncryption = new RSACryptoServiceProvider(1024);现在,我意识到我可以使用ExportParameters从RSACryptoServiceProvider获得指数和模数。但是,我想知道,如何使用这些数据将公钥发送回客户端(客户端也将使用RSACryptoServiceProvider),以及客户端如何使用这些数据来加密要发送给我的内容?还是说我做得完全错了?
发布于 2012-12-27 07:46:30
你的逻辑看起来没问题,看起来你只需要一些示例代码。
using System;
using System.Security.Cryptography;
using System.Text;
namespace RSA
{
class Program
{
static void Main(string[] args)
{
try
{
var rsaServer = new RSACryptoServiceProvider(1024);
var publicKeyXml = rsaServer.ToXmlString(false);
var rsaClient = new RSACryptoServiceProvider(1024);
rsaClient.FromXmlString(publicKeyXml);
var data = Encoding.UTF8.GetBytes("Data To Be Encrypted");
var encryptedData = rsaClient.Encrypt(data, false);
var decryptedData = rsaServer.Decrypt(encryptedData, false);
Console.WriteLine(Encoding.UTF8.GetString(decryptedData));
Console.WriteLine("OK");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
}
}发布于 2017-12-21 11:25:39
1-请在您的密钥中使用>= 2048位进行保护,直到2025年。
上面的代码来自2012年,但我在尝试为Putty / Linux服务器连接创建ssh-rsa密钥时遇到了它。
我刚刚解决了类似的问题,即以适当的格式创建一个公共ssh-rsa密钥,以匹配PuttyGen。
对于Microsoft .net RSACryptoServiceProvider,它将如下所示:
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(3072);
byte[] sshrsa_bytes = Encoding.Default.GetBytes("ssh-rsa");
byte[] n = RSA.ExportParameters(false).Modulus;
byte[] e = RSA.ExportParameters(false).Exponent;
string buffer64;
using (MemoryStream ms = new MemoryStream())
{
ms.Write(ToBytes(sshrsa_bytes.Length), 0, 4);
ms.Write(sshrsa_bytes, 0, sshrsa_bytes.Length);
ms.Write(ToBytes(e.Length), 0, 4);
ms.Write(e, 0, e.Length);
ms.Write(ToBytes(n.Length+1), 0, 4); //Remove the +1 if not Emulating Putty Gen
ms.Write(new byte[] { 0 }, 0, 1); //Add a 0 to Emulate PuttyGen (remove it not emulating)
ms.Write(n, 0, n.Length);
ms.Flush();
buffer64 = Convert.ToBase64String(ms.ToArray());
}
string pubssh = string.Format("ssh-rsa {0} generated-key", buffer64);您可以看到我用于测试的私钥& putty gen源代码链接https://www.cameronmoten.com/2017/12/21/rsacryptoserviceprovider-create-a-ssh-rsa-public-key/
我在微软工作,但这是我个人的回答,不是微软的。
BouncyCastle原始帖子(Link)
https://stackoverflow.com/questions/14047532
复制相似问题