请教:怎么用RSA的公钥传递Rijndael的私钥?(代码见内)

shyworm 2004-03-25 10:49:06
这是发送方A的代码:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string xmlstr = rsa.ToXmlString(false); //只包含公钥
byte[] buf = Encoding.Unicode.GetBytes(xmlstr);

UdpClient udp = new UdpClient(12000);
udp.Send(buf,buf.Length,"HostNameB",12001);//发送rsa公钥给B

RijndaelManaged rm = new RijndaelManaged();
string srmkey = Encoding.Unicode.GetString(rm.Key);

byte[] kbuf = rsa.Encrypt(rm.Key,true);//加密Rijnrael的key
udp.Send(kbuf,kbuf.Length,"HostNameB",12001);//发送加密的key给B

下面是接收方B的代码:
UdpClient udp = new UdpClient(12001);
IPEndPoint ipe = new IPEndPoint(IPAddress.Any,0);

//接收RSA的含公钥的xml串
byte[] buf = udp.Receive(ref ipe);
string sbuf = Encoding.Unicode.GetString(buf);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(sbuf); //重新构造RSA

//接收Rijndael的key
byte[] keyCr = udp.Receive(ref ipe);
byte[] key = rsa.Decrypt(keyCr,true); //这里出错!!!
//捕获的异常说的是:对 OAEP 填充进行解码时出错。
string skey = Encoding.Unicode.GetString(key);

我试过把发送方A的这句代码:
string xmlstr = rsa.ToXmlString(false); //只包含公钥
改成
string xmlstr = rsa.ToXmlString(true); //包含公钥和私钥
之后,接收方B就ok。

但是这样很没有道理呀!怎么能把公钥和私钥都发出去呢?
那样的话加密就没有意义了。

恳请各位大侠指点。
...全文
221 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
turnmissile 2004-03-26
  • 打赏
  • 举报
回复
sign
edobnet 2004-03-26
  • 打赏
  • 举报
回复
ha
shyworm 2004-03-26
  • 打赏
  • 举报
回复
怎么不许结贴呢?
哈!跟贴的有分哦!!!!!!!
shyworm 2004-03-25
  • 打赏
  • 举报
回复
呵呵!我自己已经搞明白了!原来我弄反了。应该是B用公钥加密,A来解密。
纠正如下:

这是发送方A的代码:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string xmlstr = rsa.ToXmlString(false); //只包含公钥
byte[] buf = Encoding.Unicode.GetBytes(xmlstr);

UdpClient udp = new UdpClient(12000);
udp.Send(buf,buf.Length,"HostNameB",12001);//发送rsa公钥给B

IPEndPoint ipe = new IPEndPoint(IPAddress.Any,0);

byte[] kbuf = udp.Receive(ref ipe);
byte[] key = rsa.Decrypt(kbuf,true);

下面是接收方B的代码:
UdpClient udp = new UdpClient(12001);
IPEndPoint ipe = new IPEndPoint(IPAddress.Any,0);

//接收RSA的含公钥的xml串
byte[] buf = udp.Receive(ref ipe);
string sbuf = Encoding.Unicode.GetString(buf);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(sbuf); //重新构造RSA

RijndaelManaged rm = new RijndaelManaged();
byte[] keybuf = rsa.Encrypt(rm.Key,true);
udp.Send(keybuf,keybuf.Length,"acerp4",12000);


全部ok了!

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧