RSA加密解密是一种常用的非对称加密算法,它的名字来源于它的发明者Rivest,Shamir和Adleman,它是一种非常安全的加密算法,它的特点是公钥和私钥不能互换,只有拥有私钥的人才能解开加密的信息。在C#中,我们可以使用自定义RSA加密解密及RSA签名和验证类来实现RSA的加密解密和签名验证。
使用方法
1. 需要在C#项目中添加自定义RSA加密解密及RSA签名和验证类。
using System;
using System.Security.Cryptography;
using System.Text;
namespace MyRSA
{
///
/// 自定义RSA加密解密及RSA签名和验证类
///
public class MyRSA
{
//RSA密钥对
private RSAParameters _privateKey;
private RSAParameters _publicKey;
///
/// 构造函数
///
public MyRSA()
{
//生成公钥和私钥
GenerateKeys();
}
///
/// 生成公钥和私钥
///
private void GenerateKeys()
{
using (var rsa = new RSACryptoServiceProvider())
{
rsa.PersistKeyInCsp = false;
_publicKey = rsa.ExportParameters(false);
_privateKey = rsa.ExportParameters(true);
}
}
}
}
2. 设置公钥和私钥:
public void SetKeys(string publicKey, string privateKey)
{
//将字符串转换成可用的RSA参数
_publicKey = MyRSA.ConvertFromPublicKey(publicKey);
_privateKey = MyRSA.ConvertFromPrivateKey(privateKey);
}
3. RSA加密:
////// RSA加密 /// /// 需要加密的内容 /// 公钥 ///加密后的字符串 public string Encrypt(string content, string publicKey) { var key = ConvertFromPublicKey(publicKey); using (var rsa = new RSACryptoServiceProvider()) { rsa.ImportParameters(key); var cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false); return Convert.ToBase64String(cipherbytes); } }
4. RSA解密:
////// RSA解密 /// /// 需要解密的内容 /// 私钥 ///解密后的字符串 public string Decrypt(string content, string privateKey) { var key = ConvertFromPrivateKey(privateKey); using (var rsa = new RSACryptoServiceProvider()) { rsa.ImportParameters(key); var cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false); return Encoding.UTF8.GetString(cipherbytes); } }
5. RSA签名:
////// RSA签名 /// /// 需要签名的内容 /// 私钥 ///签名后的字符串 public string SignData(string content, string privateKey) { var key = ConvertFromPrivateKey(privateKey); using (var rsa = new RSACryptoServiceProvider()) { rsa.ImportParameters(key); var data = Encoding.UTF8.GetBytes(content); var signData = rsa.SignData(data, new SHA1CryptoServiceProvider()); return Convert.ToBase64String(signData); } }
6. RSA验证:
////// RSA验证 /// /// 需要验证的内容 /// 签名字符串 /// 公钥 ///true:验证成功 false:验证失败 public bool VerifyData(string content, string signData, string publicKey) { var key = ConvertFromPublicKey(publicKey); using (var rsa = new RSACryptoServiceProvider()) { rsa.ImportParameters(key); var data = Encoding.UTF8.GetBytes(content); var signBytes = Convert.FromBase64String(signData); return rsa.VerifyData(data, new SHA1CryptoServiceProvider(), signBytes); } }
使用上述方法,可以很方便的在C#项目中实现RSA加密解密及RSA签名和验证。