整个算法的流程是:
接收方先同时生成公钥和私钥, 再把公钥传递给发送方, 发送方收到公钥后, 用此公钥将自己的明文加密, 然后将加密后的密文传递给接收方, 接收方用自己的私钥解密得到明文. 以下是演示这个过程的示例代码:
//
待加密的明文
string
originText
=
"
Hello
"
;
//
公钥
string
publicKey;
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
System.Security.Cryptography.RSACryptoServiceProvider rsaReceive
=
new
System.Security.Cryptography.RSACryptoServiceProvider();
System.Security.Cryptography.RSACryptoServiceProvider rsaSend
=
new
System.Security.Cryptography.RSACryptoServiceProvider();
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
//
接收方先生成公钥, 并将此公钥公开
//
参数false 表示只生成公钥, 如果为true, 则同时生成公钥和私钥.
publicKey
=
rsaReceive.ToXmlString(
false
);
//
发送方接收公钥, 并用此公钥加密数据
rsaSend.FromXmlString(publicKey);
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
//
发送方执行加密.
//
第二个参数指示是否使用OAEP, 如果使用, 则程序必须运行在Windows XP 及以上版本的
//
系统中. 无论true 或false, 解密时必须跟加密时的选择相同.
byte
[] cryp
=
rsaSend.Encrypt(System.Text.Encoding.UTF8.GetBytes(originText),
false
);
//
接收方用自己的私钥解密
byte
[] b_OriginText
=
rsaReceive.Decrypt(cryp,
false
);