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签名和验证。