C#RSA非对称加密如何实现用私钥才能加密,公钥解密?

zhiweixuexi8 2009-06-28 02:45:25
C#RSA非对称加密如何实现用私钥才能加密,公钥解密?``麻烦给方法代码```谢谢```
...全文
657 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovebanyi 2010-07-27
  • 打赏
  • 举报
回复
默认的不支持, 真是很郁闷。不过没有办法, 请找第三方的。

默认的只能是 公钥加密 私钥解密
logxing 2009-08-04
  • 打赏
  • 举报
回复
私匙公匙不能互换,你再生成一个密匙对,自己留下公匙,把私匙发布出去就行了,这样你加密的东西有私匙的人都可以解。
但是注意似乎不能单独发布私匙,只能一起发布密匙对或公匙,因此这个方法不能用做数字签名,一般的加密是没有问题的。
zhiweixuexi8 2009-06-28
  • 打赏
  • 举报
回复
DypherTextBArray = rsa.Decrypt(PlainTextBArray, false); 这里提示不正确的项
zhiweixuexi8 2009-06-28
  • 打赏
  • 举报
回复
用公加密,用私解密的时候又是对的``请问还需要改哪里吗
zhiweixuexi8 2009-06-28
  • 打赏
  • 举报
回复
不行了,我用私加密,用公解密的时候出错``提示不正确的项```
满衣兄 2009-06-28
  • 打赏
  • 举报
回复
RSA算法非常简单,概述如下:
找两素数p和q
取n=p*q
取t=(p-1)*(q-1)
取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)
取d*e%t==1

这样最终得到三个数: n d e

设消息为数M (M <n)
设c=(M**d)%n就得到了加密后的消息c
设m=(c**e)%n则 m == M,从而完成对c的解密。
注:**表示次方,上面两式中的d和e可以互换。

在对称加密中:
n d两个数构成公钥,可以告诉别人;
n e两个数构成私钥,e自己保留,不让任何人知道。
给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。
别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。

rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解
从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法
求得d。

RSA简洁幽雅,但计算速度比较慢,通常加密中并不是直接使用RSA 来对所有的信息进行加密,
最常见的情况是随机产生一个对称加密的密钥,然后使用对称加密算法对信息加密,之后用
RSA对刚才的加密密钥进行加密。

最后需要说明的是,当前小于1024位的N已经被证明是不安全的
自己使用中不要使用小于1024位的RSA,最好使用2048位的。
满衣兄 2009-06-28
  • 打赏
  • 举报
回复
自己试一下不就知道了吗
zhiweixuexi8 2009-06-28
  • 打赏
  • 举报
回复
等于说加密和解密那公钥和私钥可以交换吗?``用公加的就用私解``用私加的就用公解这样吗
满衣兄 2009-06-28
  • 打赏
  • 举报
回复
//##############################################################################   
//RSA 方式加密
//说明KEY必须是XML的行式,返回的是字符串
//在有一点需要说明!!该加密方式有 长度 限制的!! //##############################################################################
//RSA的加密函数
public string RSAEncrypt(string xmlPublicKey,string EncryptString )
{
byte[] PlainTextBArray;
byte[] CypherTextBArray;
string Result;
System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
rsa.FromXmlString(xmlPublicKey);
PlainTextBArray = (new UnicodeEncoding()).GetBytes(EncryptString);
CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
Result=Convert.ToBase64String(CypherTextBArray);
return Result;
}
//RSA的解密函数
public string RSADecrypt(string xmlPrivateKey, string DecryptString )
{
byte[] PlainTextBArray;
byte[] DypherTextBArray;
string Result;
System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
rsa.FromXmlString(xmlPrivateKey);
PlainTextBArray =Convert.FromBase64String(DecryptString);
DypherTextBArray=rsa.Decrypt(PlainTextBArray, false);
Result=(new UnicodeEncoding()).GetString(DypherTextBArray);
return Result;
}
//RSA 的密钥产升
//产生私钥 和公钥
public void RSAKey(out string xmlKeys,out string xmlPublicKey)
{
System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
xmlKeys=rsa.ToXmlString(true);
xmlPublicKey = rsa.ToXmlString(false);
}

110,571

社区成员

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

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

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